2011-02-15 27 views

cevap

23

Hafif bir etiket, yalnızca bu işleme işaret eden bir 'ref' dir. Eski etiketinin üstüne yeni açıklamalı etiketi zorla oluşturabilir: Değiştirdiğiniz bile

git tag -a -f <tagname> <tagname> 

Git v1.8.2 itibaren,, git push bir uzaktan kumandanın herhangi etiketleri değiştirmek için --force kullanmak gerekir Mevcut etiket referansı ile aynı işi gösteren bir hızlı ileri veya doğru etiket nesnesi olan bir şeyle hafif bir etiket.

#!/bin/sh 
tag=$1 
date="$(git show $tag --format=%aD | head -1)" 
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag 
+3

Ama bu kafa karıştırıcı bir tarih kullanmaz? – SamB

+1

Ayrıca, orijinal hafif etiketini zaten geliştiren geliştiriciler için herhangi bir etkisi var mı? Bu geliştiriciler, yeniden etiketledikten sonra yeni etikete ek açıklamaları görecekler mi yoksa daha önce özel bir şey yapmaları gerekiyor mu (yerel etiketlerini silmek gibi)? – sschuberth

+0

Çalışmıyor gibi görünmüyor: 'hint: Etiket zaten uzaktan kumandada mevcut olduğu için reddedildi. 'İlk önce etiketi gerçekten silmeniz gerektiğini düşünüyorum. –

17

Charles' answer ve this blog post dayanarak, ben böyle bir şey kullanmak daha iyidir düşünüyorum.

+2

Güzel :) 'yerine | -1 -s 'veya' --no-patch' kullanabilirsiniz. Ve belki de _committer_ date ('% cD') 'yi (ve ayrıca'% Cn ',' GIT_COMMITER_NAME 'adıyla) kullanması istenebilir. –

2

Ayrıca sadece git describe --tags arayışında hafif etiketlerini de içerecek şekilde kullanabilirsiniz:

git push --force origin <tagname> 
1

dönüştürme için tüm etiketler (Charles Bailey örnek ve Ferenc Wagner'in Yorum dayalı) açıklamalı:

for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done 
git push --tags --force