У меня есть проект с моделью git-ветвления, который примерно соответствует модели gv-потока nvie .
Наши ветки релизов названы в формате SemVer , напримерv1.5.2
Как только ветвь релиза получает зеленый свет для производства, мы закрываем ветвь, объединяя ее с master, применяя тег, а затем удаляя ветку.
Поскольку мы немедленно удаляем ветку релиза, мы используем один и тот же идентификатор для маркировки ветки, например 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-репо (например, другая машина разработки или промежуточная среда) имеет локальную проверку ветки 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
при наличии неоднозначной ссылки будет отмечен тег над веткой, однако это не то поведение, которое я вижу, ref: gist.github.com/tommarshall/9376724 . Это изменилось в более современной версии git? Есть ли флаг, который я могу установитьgitconfig
, чтобы получить это поведение?Вы можете явно указать, хотите ли вы ветвь или тег, используя полное имя:
или
источник