Eu li Git ramificação e marcação de melhores práticas e comentários de marcação git - melhores práticas , mas eu não ver uma resposta direta a algo que eu quis saber por um longo tempo:
Por que o Git tem tags? (em vez de apenas ramificações)
Eles parecem ser cidadãos de segunda classe, ou pelo menos "diferentes". Eles não são enviados a menos que você especifique isso explicitamente. Exclusões de tags remotas não causam exclusão em repositórios a jusante.
Esse último ponto foi um problema recentemente, pois alguém colocou um monte de tags de lixo com toneladas de confirmações de outro repositório. Nós poderíamos excluí-los a montante e obter as confirmações, mas isso não se propagaria, e da próxima vez que alguém pressionasse uma tag git push --tags
, eles repuseram essas tags e confirmações de lixo. Então tivemos que garantir que todos os excluíssem.
Quando e por que eu usaria uma tag em vez de uma ramificação?
Respostas:
Isso é feito de propósito .
Não concordo com a resposta do lxrec sobre o git ter padrões ruins. Se você seguir a lista de discussão, poderá ver que os desenvolvedores do git realmente se preocupam em ter padrões sensíveis. Faria sentido ter
--ff-only
como padrão? Acho que não.As tags possibilitam anotações para sua própria cópia de desenvolvimento local. Eu não gostaria de ver minhas tags
why_does_it_break_here
etodo_fix_formatting
serem enviadas sem meu consentimento (esses não são nomes de tags reais). A identificação de uma liberação, por outro lado, é algo que ocorre com menos frequência e faz sentido exigir um envio explícito (ou usar um alias).Não vejo grande diferença entre tags e ramificações, como o comportamento de envio / busca se comporta. No seu exemplo, se as tags de lixo tivessem sido ramificações, a exclusão seria propagada como você pretendia?
De um modo geral:
fonte
git push --tags
, mas as tags locais não. Já faz um tempo desde que eu usei o git com raiva, isso foi muito antes do Git 1.0.1) Por que os git tags são cidadãos de segunda classe?
Porque, infelizmente, o git tem muitos padrões ruins. Por mais que eu goste, simplesmente não é uma ferramenta muito intuitiva ou amigável para iniciantes. Quase todo mundo tem que configurar configurações ou aliases ou scripts do git que usem uma dúzia de opções - (como --ff-only) para fazer o git começar a se comportar da maneira que realmente deseja. Tags são apenas mais um exemplo.
2) Por que eu usaria uma tag git em vez de uma ramificação?
Uma ramificação destina-se a marcar uma confirmação na qual você faz outras confirmações. Quando você faz um novo commit nesse ramo, o próprio ramo "move" para que aponte para o novo commit.
Uma tag, por outro lado, marca um commit e depois marca esse mesmo commit para sempre (em teoria). O uso mais comum é a marcação de commits com suas versões de lançamento oficiais toda vez que você lança uma nova versão em produção.
Usamos ramos e tags para nossas versões de lançamento. A ramificação representa apenas a versão principal / secundária, enquanto as tags especificam versões de correção / compilação nessa versão principal / secundária. Portanto, se precisarmos aplicar uma correção de bug em uma versão antiga, simplesmente selecionamos a confirmação de correção de bug do master no ramo apropriado e, em seguida, identificamos a nova confirmação com o novo número de versão obtido durante a implantação.
fonte