Saya punya proyek dengan model percabangan git yang kira-kira mengikuti git-flow nvie .
Cabang rilis kami diberi nama dalam format SemVer , misv1.5.2
Setelah cabang rilis diberi lampu hijau untuk produksi, kami menutup cabang, dengan menggabungkannya menjadi master, menerapkan tag, dan kemudian menghapus cabang.
Saat kami segera menghapus cabang rilis, kami telah menggunakan pengidentifikasi yang sama untuk menandai cabang, misalnya v1.5.2
Inilah perintah yang akan kami gunakan untuk menutup cabang rilis:
$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags
Ini tampaknya berfungsi di sebagian besar kasus, namun hal itu menyebabkan masalah dalam skenario di mana instance lain dari git repo (misalnya mesin dev lain, atau lingkungan pementasan) memiliki checkout lokal dari cabang v1.5.2.
The git push origin :v1.5.2
perintah akan menghapus cabang di remote, tetapi tidak menghapus versi lokal dari cabang (jika ada) di semua repo.
Ini mengarah ke referensi yang ambigu, ketika mencoba checkout v1.5.2
di repo-repo itu:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Bisakah ini dihindari tanpa menggunakan sintaks yang berbeda untuk cabang, misalnya release-v1.5.2
, atau v1.5.2-rc
?
Atau apakah itu tidak dapat dihindari, dan oleh karena itu ide dasarnya buruk untuk membuat tag dengan nama yang sama dengan cabang yang dihapus?
git checkout
akan memeriksa tag di atas cabang ketika ada referensi yang ambisius, namun ini bukan perilaku yang saya lihat, ref: gist.github.com/tommarshall/9376724 . Apakah ini sesuatu yang berubah dalam versi git yang lebih modern? Apakah ada bendera yang bisa saya aturgitconfig
untuk mendapatkan perilaku ini?