Git kullanarak bir etiketi uzak bir depoya nasıl iletirsiniz?


2218

Dizüstü bilgisayarıma uzak bir Git deposunu kopyaladım, sonra bir etiket eklemek istedim.

git tag mytag master

git tagDizüstü bilgisayarımda çalıştırdığımda etiket mytaggösterilir. Daha sonra tüm müşterilerime bu etiketi var bu yüzden uzak depoya itmek istiyorum, bu yüzden ben koşmak git pushama mesajı aldım:

Her şey güncel

Ve masaüstüme gidip çalıştırırsam git pullve git taghiçbir etiket gösterilmezse.

Ayrıca projede bir dosya üzerinde küçük bir değişiklik yapmaya çalıştım, sonra sunucuya itmek. Bundan sonra değişikliği sunucudan Masaüstü bilgisayarıma çekebilirim, ancak git tagmasaüstü bilgisayarımda çalışırken hala etiket yok .

Tüm istemci bilgisayarların görebilmesi için etiketimi uzak depoya nasıl gönderebilirim?

Yanıtlar:


1090

git push --follow-tags

Bu Git 1.8.3'te sunulan aklı başında bir seçenektir:

git push --follow-tags

Hem taahhütleri hem de yalnızca ikisi de olan etiketleri iter:

  • açıklamalı
  • itilen taahhütlerden ulaşılabilir (bir ata)

Bu aklı başında çünkü:

--tagsKaçınılması gereken nedenlerden ötürü .

Git 2.4 eklemiştirpush.followTags sizinle ayarlayabilirsiniz varsayılan olarak O bayrağı açmak için seçenek:

git config --global push.followTags true

16
Bunun için teşekkürler, her şeyi tek seferde itmek mantıklı, içeriği itmek ve etiketleri ayrı ayrı itmek zorundasınız.
Shane

1
Benim için bir anda "açıklamalı" ve "itilen taahhütlerden ulaşılabilir" arasında bir ve-ilişki olduğu açık değildi. Açıklamalı olsun olmasın, tüm ulaşılabilir etiketleri zorlayacağını umuyordum. Belki bir OR olmadığından emin olmak için düzenleyin?
Gauthier

soo, bunu yaptığım gibi, bitbucket'e geri dönüyorum, komut satırından görebilmenin yanında bir yerde bir etiket listesi görmeli miyim?
PositiveGuy

10
Bu benim için git 2.5.0'da işe yaramıyor, ama işe yarıyor git push origin --tags.
nnyby

3
Push.followTags ipucu için teşekkürler. Bunun kutudan çıktığı varsayılan değer olmadığına inanamıyorum. Onsuz, etiketlemeye bile uğraşmayın, senkronizasyon etiketlerini unutacak ve çıkacaksınız.
moodboom

3606

Tek bir etiketi itmek için :

git push origin <tag_name>

Ve aşağıdaki komut tüm etiketleri itmelidir ( önerilmez ):

git push --tags

426
İş git push --tagsarkadaşlarınız tüm etiketleri zorlamak için eğitildiklerinde kötü etiketlerden kurtulmanın çok zor olabileceği için başkalarını kullanmamanızı veya kullanmamanızı tavsiye ederim , çünkü insanlar istedikleri her seferinde yerel olarak eski kötü etiketleri itmeye devam ettikçe yeni bir etiket eklemek için. Bu nedenle, sadece her birine birisine git push origin <tag_name>şimdi kullanmasını tavsiye edeceğim .
Scott Jungwirth

43
Bir itmek için hareket : etiketi git push origin <tag_name> --force
Bob Stein

38
@ScottJungwirth Ben bir geliştirici olarak dikkatli olmalı düşünüyorum. Aksi takdirde, mevcut komutları hiç öğretmemeyi de tavsiye edebilirsiniz.
Willa

18
Etiketiniz uzak dalla aynıysa ve git pushbaşarısız olursa error: src refspec <tag_name> matches more than one., şu şekilde itebilirsinizgit push origin tag <tag_name>
Volodymyr Sapsai

5
@Willa soru " uzak bir repo bir etiket itmek" oldu . Bu git push origin <tag_name>soru için çok daha iyi bir cevap. ;)
Wildcard

265

Spesifik olarak itmek için bir etiket aşağıdakileri yapar git push origin tag_name


99

Trevor'ın cevabını genişletmek için tek bir etiketi veya tüm etiketlerinizi aynı anda itebilirsiniz.

Tek Etiketi Zorla

git push <remote> <tag>

Bu, bunu açıklayan ilgili belgelerin bir özetidir ( kısalık için atlanan bazı komut seçenekleri):

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

<refspec>...

Bir <refspec>parametrenin biçimi … kaynak ref <src>, ardından iki nokta üst üste :ve ardından hedef ref <dst>

<dst>Bu itme ile güncellenir uzak tarafında hangi ref söyler ... Eğer :<dst>atlanırsa, aynı ref <src>güncellenecektir ...

etiketi <tag>, ile aynı anlama gelir refs/tags/<tag>:refs/tags/<tag>.

Tüm Etiketlerinizi Aynı Anda Gönderin

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

İlgili belgelerin bir özeti ( kısalık için atlanan bazı komut seçenekleri):

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

--tags

refs/tagsKomut satırında açıkça listelenen refspec'lere ek olarak altındaki tüm referanslar gönderilir .


Örnek anahtar kelimeyi dışarıda bırakmaktır tag. örn git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Buna ihtiyacın yok. Böyle bir kaynak için tek bir etiketi ittiniz: git push origin my-tag(Sadece denedim!)
Andres F.

1.9.1 sürümünü kullanıyordum , ya sen @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Sürüm 2.10.2. Belki de budur?
Andres F.


51

Tüm git push --tagskomutları basitçe komutla gönderebilirsiniz .

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


15

git push <remote-name> tag <tag-name>Bir etiketi ittiğimden emin olmak için kullanıyorum . Ben gibi kullanın: git push origin tag v1.0.1. Bu model belgelere ( man git-push) dayanmaktadır :

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

1
mükemmel, üstte olmalıydı - bir etiketin bir dalın err tarafından itilmediğini garanti ettiği için.
samshers
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.