Câu hỏi Nếu thẻ git thay đổi trên điều khiển từ xa, tìm nạp git không cập nhật cục bộ. Đây có phải là một lỗi?


Tôi đã sửa nó cho repo bằng cách xóa thẻ cục bộ và sau đó thực hiện tìm nạp git. Điều này mang thẻ được cập nhật.

Có cách nào "đúng" để cập nhật các thẻ có thể đã thay đổi trên điều khiển từ xa không? Đây là một thẻ đơn giản, chưa được ký hoặc bất kỳ thứ gì, được tạo bằng "git tag"


36
2017-12-08 14:59


gốc


Siêu muộn ở đây nhưng nhận xét "Thẻ không thực sự phải thay đổi" không có liên quan gì cả. - Shawn Erquhart


Các câu trả lời:


Đảm bảo bạn tìm nạp tất cả các thẻ (thông qua git fetch --tags), để có được tất cả các các thẻ và không chỉ các thẻ tham chiếu các cam kết có thể truy cập từ các đầu chi nhánh.

Các thẻ (được tìm nạp) này là những chú thích được chú thích (và thường không có trọng lượng nhẹ)và nếu bạn thêm người đã xóa trên repo địa phương, họ sẽ chỉ bật lại sau khi tìm nạp.

Tuy nhiên, nếu bạn đã xóa một trọng lượng nhẹ, thì bạn cần phải tạo lại cục bộ: một thẻ nhẹ không thông thường đẩy hoặc lấy vào / từ một repo từ xa.

Lưu ý rằng bắt đầu git 1.9 / 2.0 (Q1 2014), git fetch --tags sẽ tìm nạp mọi thứ (như git fetch), cộng với các thẻ. Xem "Làm "git fetch --tags"Bao gồm"git fetch”?".

Một lần nữa, lấy "tất cả mọi thứ" có nghĩa là chú thích và trọng lượng nhẹ (nếu những thẻ nhẹ trước đây đã được đẩy).


Như đã nêu dưới đây trong biocyberman'S câu trả lời, nếu bạn muốn tìm nạp thẻ từ tất cả các điều khiển từ xa (không chỉ từ xa mặc định có tên 'origin'), bạn cần phải thêm --all Tùy chọn.

git fetch --tags --all

54
2017-12-08 15:29



Bạn có thể bao gồm một tham chiếu đến điều này không: "một thẻ nhẹ không được đẩy hoặc tìm nạp đến / từ một repo từ xa." ? Tôi không tìm thấy tham chiếu về hành vi đó trong tài liệu. - yucer
@yucer Những gì tôi có nghĩa là (5 năm trước) rằng thẻ trọng lượng nhẹ không có nghĩa là để được đẩy / kéo: git-scm.com/docs/git-tag "Thẻ chú thích có nghĩa là để phát hành trong khi thẻ nhẹ có nghĩa là cho nhãn đối tượng riêng hoặc tạm thời. Vì lý do này, một số lệnh git cho đặt tên đối tượng (như git mô tả) sẽ bỏ qua thẻ trọng lượng nhẹ theo mặc định." - VonC
@yucer Ví dụ: git push không đẩy bất kỳ thẻ nào. git-scm.com/docs/git-push: Nhưng git push --follow-tags? Nó chỉ đẩy mất tích được chú thích thẻ. Không nhẹ. Thiết kế bởi. - VonC
Như một vấn đề của thực tế, thẻ trọng lượng nhẹ được lấy từ một repo từ xa. (Một cách đơn giản git fetch là đủ.) Và các thẻ được tìm nạp là chính xác những gì chúng đang ở trên điều khiển từ xa: nhẹ hoặc được chú thích. (git phiên bản 2.7.4) - Robert Siemer
@RobertSiemer Tôi đồng ý. Về mặt kỹ thuật, bạn có thể đẩy / tìm nạp các thẻ nhẹ. Thẻ nhẹ được thiết kế nhiều hơn cho việc sử dụng cục bộ. - VonC


Những gì bạn đã nói là đúng cách và đó là những gì git tag hướng dẫn sử dụng (thực sự, nó nói, không thay đổi các thẻ trên repo từ xa trừ khi thế giới đang kết thúc):

git tag -d X
git fetch origin tag X

5
2017-12-08 16:17



Never change remote tag! Đây là cảnh báo tốt! - Eric Wang
@flybird yea không phải là một ý tưởng tuyệt vời nhưng đôi khi chúng tôi phạm sai lầm hoặc vội vã quyết định để làm sạch từ xa và xóa tất cả các thẻ địa phương với git tag -l | xargs git tag -d sau đó tìm nạp chúng git fetch --tags một lần nữa tôi nghĩ tốt nhất là không nên thay đổi vì vậy hãy cẩn thận khi thiết lập. Rất nhiều người dường như thích hướng dẫn viên ở drupal.org/node/1015226 - CrandellWS
Tôi không thể tìm thấy một tham chiếu đến điều này "không thay đổi các thẻ trên repo từ xa trừ khi thế giới đang đến một kết thúc" trong hướng dẫn sử dụng. Bạn có thể đưa ra tham chiếu chính xác không? Tôi muốn đọc thêm về vấn đề này. - yucer


Trong thực tế git fetch --tags là đủ để cho git ghi đè các thẻ có trọng lượng nhẹ và được chú thích bằng thẻ từ xa thuộc một trong hai loại. Bạn có thể coi đó là lỗi tài liệu vì không đề cập đến điều đó.

Các thẻ cục bộ có tên không tương đương với dấu nhắc sẽ bị bỏ lại một mình với lệnh này.

Thử nghiệm với phiên bản git 2.7.4.


2
2018-01-10 19:27





Tôi không nghĩ đó là lỗi. Mặc dù bạn không nên thay đổi thẻ, nếu một thay đổi ngược dòng, điều này sẽ cập nhật thẻ trên repo của bạn:

git fetch origin "+refs/tags/*:refs/tags/*"

1
2017-09-13 01:04





Trong trường hợp một có nhiều luồng ngược dòng:

git --version
git version 2.11.1 
git fetch --tags --all

không có --all tùy chọn, tôi không thể tìm nạp các thẻ từ thượng nguồn có tên không phải là "ngược dòng".


1
2017-11-09 08:29



Điểm tốt. +1. Tôi đã bao gồm tùy chọn đó trong câu trả lời của riêng tôi để có nhiều khả năng hiển thị hơn. - VonC


Tôi nghĩ đúng cách là:

  git fetch origin --tags --force

Bạn nên tránh phải có một chi nhánh có cùng tên thẻ, bởi vì thanh toán ưu tiên chi nhánh và bạn có thể rơi như thẻ không được cập nhật. Có lẽ git nên có một cảnh báo trong trường hợp này, một cái gì đó như:

Bạn đã cập nhật một thẻ khác với một chi nhánh của   cùng tên. Tham chiếu đến "tagname" trở nên mơ hồ.


0
2017-10-01 10:33