Push git eşzamanlı olarak etiketleri ve etiketleri aynı anda


387

git push --tagsDüz eski ile ayrı bir işlem olmasının nedeninin farkındayım git push. Etiketleri itme bilinçli bir seçim olmalıdır, çünkü yanlışlıkla birini itmek istemezsiniz. Bu iyi. Ama ikisini bir araya getirmenin bir yolu var mı? (Bir kenara git push && git push --tags.)


4
Senin sorunun ne git push && git push --tags?
fuz

21
Özellikle hiçbir şey, bağlantının iki kez kurulması gerektiğinden, sadece daha yavaştır.
Will Robertson

16
Aşağıdaki güncellenmiş cevabımı görün: --follow-tagsgit 1.8.3'ten beri yeni bir seçenek var
VonC

24
Bunları ayrı ayrı yapmamanın bir başka nedeni, bu tür otomasyona sahip olduğunuzda aynı taahhüt için iki CI yapısını tetiklemekten kaçınmaktır.
Alex R

Ayrıca --tagshafif ve açıklamalı etiketler arasında ayrım yapmaz kaynak
karlsebal

Yanıtlar:


555

Mayıs 2015 Güncellemesi

İtibariyle Git 2.4.1 yapabileceğiniz

git config --global push.followTags true

True olarak ayarlanırsa, varsayılan olarak --follow-tags seçeneğini etkinleştirin.
- no-follow-tags belirterek, bu yapılandırmayı anında gönderme sırasında geçersiz kılabilirsiniz.

Matt Rogers'ın Wes Hurd'a cevap verdiği bu konuda belirtildiği gibi :

--follow-tags yalnızca ek açıklama eklenmiş etiketleri iter .

git tag -a -m "I'm an annotation" <tagname>

Bu itilirdi (aksine git tag <tagname>, burada bahsettiğim gibi, itilmeyecek hafif bir etiket )

Güncelleme Nisan 2013

Yana Git 1.8.3 (Nisan 22d, 2013) , artık etiketleri itmek sonra dalları itin ve 2 komutları yapmak zorunda :

Yeni " --follow-tags" seçeneği, " git push" 'ye dalları dışarı iterken ilgili açıklamalı etiketleri itmesini söyler .

Artık yeni taahhütleri uygularken deneyebilirsiniz:

git push --follow-tags

Bu, tüm yerel etiketleri zorlamaz, yalnızca git push.

Git 2.4.1+ (2. Çeyrek 2015) seçeneği tanıtacaktır push.followTags: bkz. " " git push"Bir şubeye etiketler dahil etme? ".

Orijinal cevap, Eylül 2010

Nükleer seçenek git push --mirror, tüm ref'leri alt üst edecek refs/.

Mevcut şube taahhüdünüzle yalnızca bir etiketi itebilirsiniz:

git push origin : v1.0.0 

--tagsSeçeneği aşağıdaki gibi bir refspec ile birleştirebilirsiniz :

git push origin --tags :

(Beri --tagsaracılığıyla: altındaki tüm ref refs/tags, itilir açık komut satırında listelenen refspecs ek olarak )


Ayrıca "Git push" invocation " ile tek bir şube ve etiket itme girişi var

Zoltán Füzesi tarafından Git posta listesine kullanışlı bir ipucu gönderildi :

Bunu .git/configçözmek için kullanıyorum :

[remote "origin"]
    url = ...
    fetch = +refs/heads/*:refs/remotes/origin/*
    push = +refs/heads/*
    push = +refs/tags/*

Bu satırlar eklendiğinde git push origintüm dallarınızı ve etiketlerinizi yükleyeceksiniz. Bunlardan yalnızca bir kısmını yüklemek istiyorsanız, bunları numaralandırabilirsiniz.

Henüz kendim denemedim, ancak git push'a dalları ve etiketleri aynı anda itmenin başka bir yolu eklenene kadar faydalı olabilir.
Öte yandan, yazmayı umursamıyorum:

$ git push && git push --tags

Dikkat , Aseem Kishore tarafından yorumlandığı gibi

push = +refs/heads/*olacak tüm dallarını zorla iter .

Bu beni şimdi ısırdı, yani FYI.


René Scheibe bu ilginç yorumu ekliyor :

--follow-tagsParametresi altında tek etiketler olarak yanıltıcıdır .git/refs/tagskabul edilir.
Eğer git gcçalıştırılır, etiketler taşınır .git/refs/tagsiçin .git/packed-refs. Daha sonra git push --follow-tags ...artık beklendiği gibi çalışmaz.


3
Bağladığınız gönderiye yapılan bir yorum, push = +refs/heads/*satır kuvvetinin tüm dallarınızı ittiğini gösterir . Bu beni şimdi ısırdı, FYI.
Aseem Kishore

2
Re: --follow-tagsgit git 1.8.3 eklenen bayrak, git kurulum varsayılan yapmak için yapılandırabilirsiniz?
Trevor Burnham

1
Hayır @TrevorBurnham, tek ölçüsü push.default( git-scm.com/docs/git-config ) itme varsayılan eylemleri tanımlayabilir ( nothing, matching, upstream, simplegibi stackoverflow.com/a/10002469/6309 ). --follow-tagAçık bir şekilde eklemeniz gerekir .
VonC

1
@VonC Etiketi zorla itmek istersem ne olur? git push --follow-tags -fbenim için çalışmadı.
mauryat

1
--follow-tagsParametresi altında tek etiketler olarak yanıltıcıdır .git/refs/tagskabul edilir. Eğer git gcçalıştırılır, etiketler taşınır .git/refs/tagsiçin .git/packed-refs. Daha sonra git push --follow-tags ...artık beklendiği gibi çalışmaz.
René Scheibe

4

Belki bu birine yardımcı olur:

 1. git commit -a -m "msg"  
 2. git tag 0.1.0                // creates a new tag locally     
 3. git push origin tag 0.1.0    // pushes the tag & the code in the remote repo          

Çözümünüzü git-2.21.0.windows.1 ile denedim ve 3'ün yalnızca etiketi ittiğini buldum
Dustin Sun

Sonunda iyi çalışıyor. Tüm 3 komutları sırayla deniyorsunuz ve uzak repo ayarlı (git remote -v)?
Rajesh Gupta

Ben 1. adımda msj ' "-m işlemek Git' kullanılmış ve hiçbir -a parametresi yoktu bu olabilir neden takipten dolayı teşekkür ederiz..!
Dustin Sun

2

@since Git 2.4

git push --atomic origin <branch name> <tag>


0

Git GUI

Git GUI'nin PUSH düğmesi vardır - punta'yı affedin ve açtığı iletişim kutusunda etiketler için bir onay kutusu bulunur.

Komut satırından etiketleri olmadan bir kolu ittim ve sonra --follow-tags yukarıda açıklanan seçeneği . Seçenek, açıklamalı aşağıdaki etiketlerle açıklanmaktadır. Etiketlerim basit etiketlerdi.

Ben bir şey düzeltti, düzeltme ile taahhüt etiketli, (böylece meslektaşları düzeltmeyi kiraz alabilir), daha sonra yazılım sürüm numarasını değiştirdi ve oluşturduğum sürümü etiketledi (böylece meslektaşları bu sürümü klonlayabilir).

Git, her şeyin güncel olduğunu söyleyerek geri döndü. Etiketleri göndermedi! Belki de etiketlere açıklama eklenmediğinden. Belki de dalda yeni bir şey olmadığı için.

Git GUI ile benzer bir itme yaptığımda etiketler gönderildi.

Git GUI ile gönderilen etiketler

Şimdilik, değişikliklerimi komut satırımla değil Git GUI ile uzaktan kumandalarıma iteceğim --follow-tags.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.