2013-10-16 23 views
11

Tôi thường chạy:"git push" và "git push --tags" trong cùng một lệnh?

git push 
git tag v4.7 
git push --tags 

Cả hai hoạt động đầu tiên và thứ ba kết nối với máy chủ, mà lãng phí thời gian.
Tôi muốn làm cho nó nhanh hơn bằng cách chỉ đẩy một lần. (Các) lệnh nào sẽ đạt được điều này?
Nó đang ở trong bash script và cần chạy tốt trong bất kỳ chi nhánh nào, không chỉ là master.

Đọc hướng dẫn, tôi không nghĩ rằng git push all sự là giải pháp:

--all: Thay vì đặt tên mỗi ref để đẩy, quy định rằng tất cả các refs dưới refs/con/được đẩy.

--tags: Tất cả refs trong refs/tags được đẩy, ngoài refspecs được liệt kê rõ ràng trên dòng lệnh.

+0

điều gì về 'git push --tags HEAD'? –

+0

HEAD có nghĩa là nhánh hiện tại, vì vậy tôi có thể sử dụng nó như là một "refspec được liệt kê rõ ràng" thực sự! Bạn có thể vui lòng đăng bài này như là một câu trả lời để tôi có thể chấp nhận nó? –

Trả lời

11

Các tùy chọn gần nhất có thể là:

git push --follow-tags 

Đẩy tất cả các refs đó sẽ được đẩy mà không cần tùy chọn này, và cũng có thể đẩy thẻ chú thích trong refs/tags bị thiếu từ điều khiển từ xa nhưng đang trỏ đến số cam kết có thể truy cập được từ các lần đẩy được đẩy.

+0

Điều đó nghe giống như một giải pháp hợp lệ ... Làm thế nào nó khác với 'git push --tags HEAD'? –

+0

@NicolasRaoul Giống như 'git push', nó cũng đẩy các nhánh theo dõi khác (phụ thuộc vào cấu hình' push.default'), không chỉ 'HEAD', và nó đẩy các thẻ trên các nhánh được đẩy, không phải tất cả các thẻ. – Kornel

+0

Tôi không nghĩ đó là chính xác. AFAIK 'git push' chỉ đẩy nhánh hiện tại. –

-4

Bạn có thể sử dụng git push origin <your branch name>

+0

Điều đó không trả lời câu hỏi vì nó không đẩy các thẻ. –

4

Theo tài liệu của --tags, bạn có thể chỉ định thêm refspecs để được đẩy.

Vì vậy, bạn chỉ có thể sử dụng

git push --tags origin HEAD 
+2

Điều này không xuất hiện để hoạt động: "fatal: 'HEAD' dường như không phải là kho lưu trữ git". Tuy nhiên, 'git push origin HEAD --tags' hoạt động. –

+0

@MariusGedminas: Cảm ơn vì đã bắt được điều đó. Đã sửa. –

1

Bạn có thể tạo alias phải lệnh này một truy cập nhanh:

git config --global alias.p '!git push && git push --tags' 

hoặc

git config --global alias.pa '!git push --all && git push --tags' 

bây giờ bạn có thể làm điều đó như này:

git tag v4.7 
git p 

Bạn có thể đọc thêm về bí danh here

+0

Mẹo thú vị, nhưng điều đó không làm giảm số lượng yêu cầu được thực hiện cho máy chủ, phải không? Như đã giải thích trong câu hỏi đó là một kịch bản bash, do đó, câu hỏi của tôi không phải là gõ ít hơn. –