Bagaimana Anda mendorong tag ke repositori jarak jauh menggunakan Git?


2218

Saya telah mengkloning repositori remote Git ke laptop saya, lalu saya ingin menambahkan tag jadi saya berlari

git tag mytag master

Ketika saya menjalankan git taglaptop saya, tag mytagditampilkan. Saya kemudian ingin mendorong ini ke repositori jarak jauh jadi saya memiliki tag ini di semua klien saya, jadi saya menjalankan git pushtetapi saya mendapat pesan:

Semuanya terbaru

Dan jika saya pergi ke desktop saya dan menjalankan git pulldan kemudian git tagtidak ada tag yang ditampilkan.

Saya juga telah mencoba melakukan perubahan kecil pada file di proyek, kemudian dorong ke server. Setelah itu saya bisa menarik perubahan dari server ke komputer Desktop saya, tetapi masih belum ada tag saat dijalankan git tagdi komputer desktop saya.

Bagaimana saya bisa mendorong tag saya ke repositori jarak jauh sehingga semua komputer klien dapat melihatnya?

Jawaban:


1092

git push --follow-tags

Ini adalah opsi waras yang diperkenalkan di Git 1.8.3:

git push --follow-tags

Itu mendorong kedua komitmen dan hanya tag yang keduanya:

  • beranotasi
  • dapat dijangkau (leluhur) dari komitmen yang didorong

Ini waras karena:

  • Anda hanya harus mendorong tag beranotasi ke remote, dan menyimpan tag ringan untuk pengembangan lokal untuk menghindari bentrokan tag. Lihat juga: Apa perbedaan antara tag beranotasi dan tidak berotot?
  • itu tidak akan mendorong tag beranotasi pada cabang yang tidak terkait

Karena alasan itulah yang --tagsharus dihindari.

Git 2.4 telah menambahkan satu push.followTagsopsi untuk mengaktifkan bendera yang secara default yang Anda dapat mengatur dengan:

git config --global push.followTags true

16
Terima kasih untuk ini, masuk akal untuk mendorong semuanya sekaligus, dibandingkan harus mendorong konten lalu mendorong tag secara terpisah.
Shane

1
Tidak jelas sekaligus bagi saya bahwa itu adalah dan-hubungan antara "beranotasi" dan "dapat dijangkau dari komitmen yang didorong". Saya berharap itu akan mendorong semua tag yang dapat dijangkau, apa pun jika dianotasi atau tidak. Mungkin edit untuk memastikan itu bukan OR?
Gauthier

soo, ketika saya melakukan ini, saya kembali ke bitbucket, haruskah saya melihat daftar tag di suatu tempat selain bisa melihatnya dari command-line?
PositiveGuy

10
Ini tidak bekerja untuk saya di git 2.5.0, tetapi git push origin --tagstidak.
nnyby

3
Terima kasih atas tip push.followTags. Saya tidak percaya ini bukan standar out-of-the-box. Tanpa itu, jangan repot-repot menandai, Anda akan lupa dan keluar dari tag sinkronisasi.
moodboom

3610

Untuk mendorong satu tag:

git push origin <tag_name>

Dan perintah berikut harus mendorong semua tag ( tidak disarankan ):

git push --tags

427
Saya sarankan untuk tidak menggunakan atau melatih orang lain untuk menggunakan git push --tagskarena bisa sangat sulit untuk menyingkirkan tag buruk ketika rekan kerja Anda dilatih untuk mendorong semua tag, karena orang terus mendorong tag buruk lama yang mereka miliki secara lokal setiap kali mereka inginkan untuk mendorong tag baru. Karena itu, saya hanya akan menyarankan setiap orang untuk menggunakan git push origin <tag_name>sekarang.
Scott Jungwirth

43
Untuk mendorong tag yang dipindahkan : git push origin <tag_name> --force
Bob Stein

38
Yah @ScottJungwirth saya pikir sebagai pengembang harus berhati-hati. Kalau tidak, Anda mungkin menyarankan untuk tidak mengajarkan perintah yang tersedia sama sekali.
Willa

18
Jika tag Anda sama dengan cabang jarak jauh dan git pushgagal error: src refspec <tag_name> matches more than one., Anda dapat mendorongnya sebagaigit push origin tag <tag_name>
Volodymyr Sapsai

5
Nah @Willa pertanyaan itu "mendorong sebuah tag ke repo terpencil." Jadi git push origin <tag_name>jawaban yang jauh lebih baik untuk pertanyaan itu. ;)
Wildcard

265

Untuk mendorong tertentu, satu tag lakukan sebagai berikut git push origin tag_name


99

Untuk memperluas jawaban Trevor , Anda dapat menekan satu tag atau semua tag Anda sekaligus.

Tekan Tag Tunggal

git push <remote> <tag>

Ini adalah ringkasan dari dokumentasi yang relevan yang menjelaskan hal ini (beberapa opsi perintah dihilangkan untuk singkatnya):

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

<refspec>...

Format <refspec>parameter adalah ... sumber ref <src>, diikuti oleh titik dua :, diikuti oleh tujuan ref <dst>...

The <dst>memberitahu yang ref di sisi remote diperbarui dengan push ini ... Jika :<dst>dihilangkan, ref sama <src>akan diperbarui ...

tag <tag>artinya sama dengan refs/tags/<tag>:refs/tags/<tag>.

Dorong Semua Tag Anda Sekaligus

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

Berikut ini adalah ringkasan dari dokumentasi yang relevan (beberapa opsi perintah dihilangkan untuk singkatnya):

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

--tags

Semua referensi di bawah refs/tagsdidorong, selain refspec secara eksplisit terdaftar di baris perintah.


Contohnya adalah meninggalkan kata kunci tag. mis git push origin tag funny-tag-1.
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Anda tidak membutuhkannya. Anda mendorong satu tag ke asal seperti ini: git push origin my-tag(Saya baru saja mencobanya!)
Andres F.

Saya menggunakan versi 1.9.1 , bagaimana dengan Anda @AndresF. ?
JamesThomasMoon1979

1
@ JamesThomasMoon1979 Versi 2.10.2. Mungkin itu saja?
Andres F.

54

Tag tidak dikirim ke repositori jarak jauh oleh perintah git push. Kita perlu mengirim tag ini secara eksplisit ke server jarak jauh dengan menggunakan perintah berikut:

git push origin <tagname>

Kami dapat mendorong semua tag sekaligus dengan menggunakan perintah di bawah ini:

git push origin --tags

Berikut ini beberapa sumber informasi lengkap tentang penandaan git:

http://www.cubearticle.com/articles/more/git/git-tag

http://wptheming.com/2011/04/add-remove-github-tags


51

Anda dapat mendorong semua tag lokal hanya dengan git push --tagsperintah.

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


15

Saya menggunakan git push <remote-name> tag <tag-name>untuk memastikan bahwa saya mendorong tag. Saya menggunakannya seperti: git push origin tag v1.0.1. Pola ini didasarkan pada dokumentasi ( man git-push):

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

1
luar biasa, seharusnya di atas - karena memastikan tag tidak cabang didorong oleh kesalahan.
samshers
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.