Mam projekt z modelem rozgałęzień git, który z grubsza odpowiada modelowi git-flow nvie .
Nasze gałęzie wydania mają nazwy SemVer , npv1.5.2
Kiedy gałąź wydania otrzyma zielone światło do produkcji, zamykamy gałąź, łącząc ją w master, stosując tag, a następnie usuwając gałąź.
Ponieważ natychmiast usuwamy gałąź wydania, używamy tego samego identyfikatora do oznaczania gałęzi, np v1.5.2
Oto polecenia, których użylibyśmy do zamknięcia gałęzi wydania:
$ 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
Wydaje się, że działa to w większości przypadków, jednak powoduje problem w scenariuszu, w którym inne wystąpienie repozytorium git (np. Inna maszyna deweloperska lub środowisko testowe) ma lokalne pobranie z gałęzi v1.5.2.
git push origin :v1.5.2
Komenda usunie oddział w pilocie, ale nie usuwa lokalną wersję oddziału (jeśli istnieje) we wszystkich repo.
Prowadzi to do niejednoznacznego odwołania podczas próby realizacji transakcji v1.5.2
w tych repozytoriach:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Czy można tego uniknąć bez stosowania innej składni dla gałęzi, np. release-v1.5.2
Lub v1.5.2-rc
?
A może jest to nieuniknione, a zatem fundamentalnie zły pomysł, aby utworzyć tag o takiej samej nazwie jak usunięta gałąź?
źródło
git checkout
sprawdzi tag nad gałęzią, gdy pojawi się niejednoznaczne odniesienie, jednak nie takie zachowanie widzę, patrz: gist.github.com/tommarshall/9376724 . Czy to coś zmieniło się w bardziej nowoczesnej wersji git? Czy mogę ustawić flagęgitconfig
, aby uzyskać takie zachowanie?Możesz jawnie określić, czy chcesz mieć oddział, czy tag, używając pełnej nazwy:
lub
źródło