Eu tenho um projeto com um modelo de ramificação git que segue aproximadamente o fluxo git de nvie .
Nossos ramos de lançamento são nomeados no formato SemVer , por exemplo,v1.5.2
Depois que uma ramificação de liberação recebe luz verde para produção, fechamos a ramificação, mesclando-a no mestre, aplicando uma tag e excluindo a ramificação.
Como excluímos imediatamente o ramo de lançamento, usamos o mesmo identificador para marcar o ramo, por exemplo, v1.5.2
Aqui estão os comandos que usamos para fechar um ramo de lançamento:
$ 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
Isso parece funcionar na maioria dos casos, no entanto, está causando um problema no cenário em que outra instância do repositório git (por exemplo, outra máquina de desenvolvimento ou ambiente de teste) tem uma verificação local da ramificação v1.5.2.
O git push origin :v1.5.2
comando excluirá a ramificação no controle remoto, mas não excluirá a versão local da ramificação (se existir) em todos os repositórios.
Isso leva a uma referência ambígua ao tentar fazer checkout v1.5.2
nesses repositórios:
$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Isso pode ser evitado sem o uso de uma sintaxe diferente para os ramos, por exemplo release-v1.5.2
, ou v1.5.2-rc
?
Ou é inevitável e, portanto, é uma péssima idéia criar uma tag com o mesmo nome de uma ramificação excluída?
fonte
git checkout
fará check-out da tag na ramificação quando houver uma referência ambígua, mas esse não é o comportamento que estou vendo, ref: gist.github.com/tommarshall/9376724 . Isso mudou em uma versão mais moderna do git? Existe um sinalizador que eu possa definirgitconfig
para obter esse comportamento?Você pode especificar explicitamente se deseja uma ramificação ou uma tag usando o nome completo:
ou
fonte