2012-07-03 36 views
17

Tôi muốn xem những thẻ nào tôi có ở địa phương không có sẵn trên một điều khiển từ xa cụ thể. Tôi có thể làm cái này như thế nào? Tôi biết tôi có thể làm git push --tags để đẩy tất cả. Tuy nhiên, nếu có một số thẻ mà tôi không muốn bị đẩy, làm thế nào để tôi chắc chắn rằng tôi đã không bỏ lỡ một số?Cách liệt kê các thẻ Git chưa được đánh dấu

Trả lời

22

Bạn có thể sử dụng sau đây để xem các thẻ đang tồn tại tại địa phương nhưng không có trong quy định từ xa:

git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)" 

Lưu ý rằng git ls-remote chương trình cả thẻ chú thích và cam kết nó trỏ tới với ^{}, vì vậy chúng ta cần để loại bỏ các bản sao.

Một cách khác là sử dụng lá cờ --dry-run/-n để git push:

git push --tags --dry-run 

này sẽ hiển thị những gì thay đổi sẽ bị đẩy, nhưng sẽ không thực sự làm cho những thay đổi này.

+1

Vì bạn đang sử dụng đầu ra của 'git ls-remote' để lọc ra khỏi' show-ref', không có nhiều tác hại trong việc để lại dòng '^ {}'. đơn giản hơn: 'git show-ref --tags | grep -v -F "$ (git ls-remote --tags origin | cut -f 2)" ' – phinze

+1

Đây là lệnh chính xác, ngoại trừ' 'được thay thế bằng' origin'. Sử dụng lệnh này để sao chép/dán: 'git show-ref --tags | grep -v -F "$ (git ls-remote - thẻ xuất xứ | grep -v '\^{}' | cut -f 2)" ' – funroll

2

Đối với hồ sơ, tôi đang sử dụng một biến thể của điều này với các 'comm' lệnh:

comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2) 

Tôi đang sử dụng nó như là một bí danh git trong .gitconfig, với bash thích trích dẫn như thế này:

[alias] 
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\"" 
Các vấn đề liên quan