Làm thế nào để bạn đẩy một thẻ vào một kho lưu trữ từ xa bằng Git?


2218

Tôi đã sao chép một kho lưu trữ Git từ xa vào máy tính xách tay của mình, sau đó tôi muốn thêm một thẻ để tôi chạy

git tag mytag master

Khi tôi chạy git tagtrên máy tính xách tay của tôi, thẻ mytagđược hiển thị. Sau đó tôi muốn đẩy nó vào kho lưu trữ từ xa để tôi có thẻ này trên tất cả các máy khách của mình, vì vậy tôi chạy git pushnhưng tôi nhận được thông báo:

Mọi thứ đều được cập nhật

Và nếu tôi đi đến máy tính để bàn của mình và chạy git pullvà sau đó git tagkhông có thẻ nào được hiển thị.

Tôi cũng đã cố gắng thực hiện một thay đổi nhỏ trên một tệp trong dự án, sau đó đẩy nó đến máy chủ. Sau đó, tôi có thể kéo thay đổi từ máy chủ sang máy tính để bàn của mình, nhưng vẫn không có thẻ khi chạy git tagtrên máy tính để bàn của tôi.

Làm cách nào tôi có thể đẩy thẻ của mình vào kho lưu trữ từ xa để tất cả các máy khách có thể nhìn thấy nó?

Câu trả lời:


1091

git push --follow-tags

Đây là một tùy chọn lành mạnh được giới thiệu trong Git 1.8.3:

git push --follow-tags

Nó đẩy cả hai cam kết và chỉ các thẻ là cả hai:

  • chú thích
  • có thể truy cập (tổ tiên) từ các cam kết đẩy

Điều này là lành mạnh bởi vì:

Đó là vì những lý do --tagsnên tránh.

Git 2.4 đã bổ sung các push.followTagstùy chọn để biến cờ mà theo mặc định mà bạn có thể thiết lập với:

git config --global push.followTags true

16
Cảm ơn vì điều này, thật hợp lý khi đẩy mọi thứ trong một lần, thay vì phải đẩy nội dung sau đó đẩy các thẻ một cách riêng biệt.
Shane

1
Tôi không rõ ràng ngay lập tức rằng đó là một mối quan hệ và giữa "chú thích" và "có thể truy cập từ các cam kết được đẩy". Tôi hy vọng nó sẽ đẩy tất cả các thẻ có thể truy cập, bất kể nó có chú thích hay không. Có thể chỉnh sửa để đảm bảo đó không phải là HAY?
Gauthier

Vì vậy, khi tôi làm điều này, tôi quay trở lại bitbucket, tôi có nên xem danh sách thẻ ở đâu đó ngoài việc có thể nhìn thấy nó từ dòng lệnh không?
Tích cực,

10
Điều này không làm việc cho tôi trong git 2.5.0, nhưng git push origin --tagskhông.
nnyby

3
Cảm ơn các mẹo đẩy.followTags. Tôi không thể tin rằng đây không phải là mặc định ngoài luồng. Không có nó, thậm chí không bận tâm đến việc gắn thẻ, bạn sẽ quên và thoát khỏi các thẻ đồng bộ hóa.
psychboom

3608

Để đẩy một thẻ duy nhất :

git push origin <tag_name>

Và lệnh sau sẽ đẩy tất cả các thẻ ( không được khuyến nghị ):

git push --tags

426
Tôi khuyên bạn không nên sử dụng hoặc đào tạo người khác sử dụng git push --tagsvì việc loại bỏ các thẻ xấu có thể rất khó khăn khi đồng nghiệp của bạn được đào tạo để đẩy tất cả các thẻ, vì mọi người tiếp tục đẩy các thẻ xấu cũ mà họ có tại địa phương mỗi khi họ muốn để đẩy một thẻ mới. Bởi vì điều này, tôi sẽ chỉ mỗi người khuyên nên sử dụng git push origin <tag_name>ngay bây giờ.
Scott Jungwirth

43
Để đẩy một thẻ di chuyển : git push origin <tag_name> --force
Bob Stein

38
Vâng @ScottJungwirth Tôi nghĩ là một nhà phát triển nên cẩn thận. Nếu không, bạn cũng có thể khuyên không nên dạy các lệnh có sẵn.
Willa

18
Nếu thẻ của bạn giống với chi nhánh từ xa và git pushkhông thành công error: src refspec <tag_name> matches more than one., bạn có thể đẩy nó thànhgit push origin tag <tag_name>
Volodymyr Sapsai

5
Vâng @Willa câu hỏi là "đẩy một thẻ đến một repo từ xa." Vì vậy, git push origin <tag_name>một câu trả lời tốt hơn nhiều cho câu hỏi đó. ;)
tự đại diện

265

Để đẩy cụ thể, một thẻ làm theo git push origin tag_name


99

Để mở rộng câu trả lời của Trevor , bạn có thể đẩy một thẻ hoặc tất cả các thẻ cùng một lúc.

Đẩy một thẻ

git push <remote> <tag>

Đây là bản tóm tắt các tài liệu liên quan giải thích điều này (một số tùy chọn lệnh được bỏ qua cho ngắn gọn):

git push [[<repository> [<refspec>…]]

<refspec>...

Định dạng của một <refspec>tham số là ... nguồn ref <src>, tiếp theo là một dấu hai chấm :, tiếp theo là ref điểm đến <dst>...

Thông báo <dst>cho biết ref nào ở phía xa được cập nhật với bản đẩy này Nếu :<dst>bị bỏ qua, cùng một ref <src>sẽ được cập nhật

thẻ <tag>có nghĩa giống như refs/tags/<tag>:refs/tags/<tag>.

Đẩy tất cả các thẻ của bạn cùng một lúc

git push --tags <remote>
# Or
git push <remote> --tags

Dưới đây là bản tóm tắt các tài liệu liên quan (một số tùy chọn lệnh được bỏ qua cho ngắn gọn):

git push [--all | --mirror | --tags] [<repository> [<refspec>…]]

--tags

Tất cả các ref dưới refs/tagsđược đẩy, ngoài các refspec được liệt kê rõ ràng trên dòng lệnh.


Ví dụ là bỏ đi từ khóa tag. ví dụ git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Bạn không cần nó. Bạn đẩy một thẻ duy nhất để xuất xứ như thế này: git push origin my-tag(Tôi vừa thử nó!)
Andres F.

Tôi đã sử dụng phiên bản 1.9.1 , còn bạn @AndresF thì sao. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Phiên bản 2.10.2. Có lẽ đó là nó?
Andres F.

54

Các thẻ không được gửi đến kho lưu trữ từ xa bằng lệnh git đẩy. Chúng ta cần gửi rõ ràng các thẻ này đến máy chủ từ xa bằng cách sử dụng lệnh sau:

git push origin <tagname>

Chúng ta có thể đẩy tất cả các thẻ cùng một lúc bằng cách sử dụng lệnh dưới đây:

git push origin --tags

Dưới đây là một số tài nguyên để biết chi tiết đầy đủ về gắn thẻ git:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


51

Bạn có thể đẩy tất cả các thẻ cục bộ bằng cách chỉ cần git push --tagslệnh.

$ git tag                         # see tag lists
$ git push origin <tag-name>      # push a single tag
$ git push --tags                 # push all local tags 


15

Tôi đang sử dụng git push <remote-name> tag <tag-name>để đảm bảo rằng tôi đang đẩy một thẻ. Tôi sử dụng nó như : git push origin tag v1.0.1. Mẫu này dựa trên tài liệu ( man git-push):

OPTIONS
   ...
   <refspec>...
       ...
       tag <tag> means the same as refs/tags/<tag>:refs/tags/<tag>.

1
tuyệt vời, nên được đặt lên hàng đầu - vì nó đảm bảo một thẻ không phải là một nhánh bị đẩy bởi lỗi.
samshers
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.