У мене є проект з моделлю розгалуження git, який приблизно відповідає моделі git-потоку nvie .
Наші відділення релізів названі у форматі SemVer , наприкладv1.5.2
Як тільки гілці випуску дається зелене світло для виробництва, ми закриваємо гілку, об’єднуючи її в головний, наносячи тег, а потім видаляючи гілку.
Оскільки ми відразу видаляємо гілку випуску, ми використовували той самий ідентифікатор для позначення гілки, наприклад v1.5.2
Ось команди, які ми використаємо для закриття відділення випуску:
$ 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
Це, здається, працює в більшості випадків, однак це спричиняє проблему в сценарії, коли інший екземпляр git repo (наприклад, інша машина для розробників або постановочне середовище) має локальну перевірку гілки v1.5.2.
git push origin :v1.5.2
Команда видалить філія в пульті дистанційного керування, але не видаляє локальну версію філії (якщо він існує) у всіх угодах РЕПО.
Це призводить до неоднозначної посилання при спробі оформлення замовлення v1.5.2
в цих репортажах:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Цього можна уникнути, не використовуючи інший синтаксис для гілок, наприклад release-v1.5.2
, або v1.5.2-rc
?
Або це неминуче, а отже, принципово погана ідея створити тег з такою ж назвою, як видалена гілка?
git checkout
перевірятиме тег над гілкою, коли є амбіційна довідка, проте це не поведінка, яку я бачу, посилання: gist.github.com/tommarshall/9376724 . Це щось, що змінилося в більш сучасній версії git? Чи можна встановити прапорgitconfig
, щоб отримати цю поведінку?