Pertanyaan Bagaimana Anda mengganti nama tag Git?


Hari ini saya melihat log untuk proyek dan menyadari bahwa saya lemak meraba nama tag beberapa waktu lalu. Apakah ada cara untuk mengganti nama tag? Google belum menemukan sesuatu yang bermanfaat.

Saya sadar saya bisa memeriksa versi yang ditandai dan membuat tag baru, saya bahkan mencobanya. Tapi itu sepertinya membuat objek tag yang tidak benar. Untuk satu,

git tag -l

daftar itu keluar dari urutan relatif terhadap semua tag lainnya. Saya tidak tahu apakah itu penting, tetapi itu membuat saya percaya bahwa objek tag baru itu tidak sesuai dengan yang saya inginkan. Saya bisa hidup dengan itu, karena saya benar-benar hanya peduli bahwa nama tag cocok dengan dokumentasi, tetapi saya lebih suka melakukannya "benar", dengan asumsi ada cara yang tepat untuk melakukan ini.


966
2018-06-22 18:09


asal


Jawaban:


Di sini adalah bagaimana saya mengganti nama tag old untuk new:

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

Kolon di perintah push menghapus tag dari repositori jarak jauh. Jika Anda tidak melakukan ini, Git akan membuat tag lama di komputer Anda saat Anda menarik.

Akhirnya, pastikan bahwa pengguna lain menghapus tag yang dihapus. Tolong beri tahu mereka (rekan kerja) untuk menjalankan perintah berikut:

git pull --prune --tags

1640
2018-04-19 16:51



Pertanyaan aslinya adalah cara mengganti nama tag, yang mudah: pertama-tama buat BARU sebagai alias OLD: git tag NEW OLD lalu hapus OLD: git tag -d OLD.

Kutipan tentang "cara Git" dan (dalam) kewarasan tidak tepat, karena ini berbicara tentang pelestarian nama tag, tetapi membuatnya mengacu pada status repositori yang berbeda.


270
2017-12-09 13:34



Selain jawaban lainnya:

Pertama Anda perlu membangun sebuah alias dari tua nama tag, mengarah ke commit asli:

git tag new old^{}

Maka Anda harus menghapus yang lama secara lokal:

git tag -d old

Kemudian hapus tag pada Anda lokasi jarak jauh (s):

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old

Akhirnya Anda perlu menambahkan tag baru Anda ke lokasi terpencil. Sampai Anda melakukan ini, tag baru (s) tidak akan ditambahkan:

git push origin --tags

Iterasikan ini untuk setiap lokasi terpencil.

Sadarilah, tentang implikasi bahwa perubahan Tag Git memiliki kepada konsumen paket!


100
2018-04-27 11:42



Jika diterbitkan, Anda tidak dapat menghapusnya (tanpa risiko terradiasi dan berbulu, begitulah). The 'Git way' adalah melakukan:

Hal yang waras. Akui saja kamu kacau, dan gunakan nama yang berbeda. Orang lain telah melihat satu nama-tag, dan jika Anda tetap menggunakan nama yang sama, Anda mungkin berada dalam situasi bahwa dua orang memiliki "versi X", tetapi mereka sebenarnya memiliki "X" yang berbeda. Jadi sebut saja "X.1" dan selesaikan dengan itu.

Kalau tidak,

Hal yang gila. Anda benar-benar ingin memanggil versi baru "X" juga, meskipun yang lain sudah melihat yang lama. Jadi cukup gunakan git-tag -f lagi, seolah-olah Anda belum mempublikasikan yang lama.

Ini sangat gila karena:

Git tidak (dan seharusnya tidak) mengganti tag di belakang pengguna. Jadi jika seseorang sudah mendapatkan tag lama, melakukan git-pull pada pohon Anda seharusnya tidak hanya membuat mereka menimpa yang lama.

Jika seseorang mendapatkan tag rilis dari Anda, Anda tidak dapat mengubah tag untuk mereka dengan memperbarui tag Anda sendiri. Ini adalah masalah keamanan yang besar, bahwa orang-orang HARUS dapat mempercayai nama-tag mereka. Jika Anda benar-benar ingin melakukan hal yang gila, Anda hanya perlu mengakuinya, dan mengatakan kepada orang-orang bahwa Anda mengacau.

Semua hak milik dari halaman manual.


25
2018-06-22 18:10



Halaman wiki ini memiliki one-liner yang menarik ini, yang mengingatkan kita bahwa kita dapat mendorong beberapa referensi:

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

dan minta klon lain melakukannya git pull --prune --tags

Jadi idenya adalah untuk mendorong:

  • <new-tag> untuk setiap komitmen yang direferensikan oleh <old-tag>: <refs/tags/old-tag>:<refs/tags/new-tag>,
  • penghapusan <old-tag>: :<refs/tags/old-tag>

Lihat sebagai contoh "Mengubah konvensi penamaan tag di dalam repositori git?".


22
2018-06-16 14:20



Sebagai tambahan pada jawaban yang lain, saya menambahkan alias untuk melakukan semuanya dalam satu langkah, dengan perasaan perintah * nix move yang lebih familiar. Argumen 1 adalah nama tag lama, argumen 2 adalah nama tag baru.

[alias]
    renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"

Pemakaian:

git renametag old new

19
2017-11-17 15:00



Untuk para petualang itu bisa dilakukan dalam satu perintah:

mv .git/refs/tags/OLD .git/refs/tags/NEW

6
2017-07-13 09:24



Bagian yang mudah adalah mengganti nama tag lokal. Bagian yang lebih sulit adalah yang terpencil. Gagasan di balik trik ini adalah menduplikasi tag / cabang lama ke yang baru dan menghapus yang lama, tanpa checkout.

Ganti nama tag jarak jauh / konversi cabang → tag Jarak Jauh: (Melihat: :refs/tags/)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

Ubah nama cabang jarak jauh / tag Jarak Jauh → konversi cabang: (Melihat: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

Output mengganti nama tag jarak jauh:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23

1
2018-02-17 13:41