Estou usando o git por cerca de um ano e gostaria de usar tagging para, bem, marcar commits em diferentes versões. Encontrei muitas informações sobre os comandos a serem usados para trabalhar com tags, mas o que eu gostaria de saber é por que usar tagging se eu posso apenas criar um novo branch chamado 1.1.0
e não tenho que turvar minha mente com um todo novo conjunto de comandos git?
Deve haver uma série de boas razões para etiquetar em vez de ramificar, mas gostaria de saber quais são essas vantagens.
Uma tag é imutável .
Considerando que você pode criar um branch chamado "1.0.0" - você, ou qualquer pessoa com direitos de commit, também pode simplesmente enviar para aquele branch (deliberadamente ou não) e mudar o que 1.0.0 significa.
Você não pode fazer isso com uma tag, uma vez que você cria uma tag - é isso; Tag 1.0.0 significa exatamente isso e não pode ser alterado * .
Essa é a principal diferença prática entre uma tag e um branch
* Você pode excluir e recriar uma tag, alterando-a, mas certamente não por acidente.
fonte
Costumo usar um fluxo de trabalho que incorpora tags e branches. As tags são boas para marcar código lançado ou construções de desenvolvimento notáveis. Ramificações são boas para controlar todas as mudanças relevantes a uma versão específica.
Aqui está um bom artigo sobre esse tipo de fluxo de trabalho: http://nvie.com/posts/a-successful-git-branching-model/
fonte
Branch e tag são a mesma coisa (ponteiro para um commit, também conhecido como "ref" ), exceto que o branch se move automaticamente para o próximo commit, enquanto a tag permanece 1 para sempre no mesmo commit.
Ao fazer uma versão, geralmente você deseja marcar o "instantâneo" do código a partir do qual essa versão foi construída e deseja que ele permaneça marcado dessa forma, mesmo enquanto continua a evoluir o código, para usar uma tag.
Se você tentar usar um branch para isso, pode inadvertidamente mover para um commit diferente, do qual a versão não foi construída.
1 A menos que você exclua a tag, é claro.
NOTA: Sei que esta é uma pergunta antiga, mas senti que a semelhança (e uma diferença crucial) entre branches e tags não foi concretizada em outras respostas tão claramente como poderia ter sido.
fonte
git commit
atualiza o cabeçalho do branch em check-out para fazer referência ao novo commit, sim, mas nenhum outro branch se move “automaticamente” para o próximo commit. Você deve esclarecer o primeiro parágrafo de sua resposta..git\refs\heads
, contendo o hash do commit. Os próprios compromissos não "lembram" qual branch os criou. Isso é diferente do Mercurial, por exemplo, onde as informações do branch podem ser escritas nos metadados do commit.Você usa tags para anotar commits importantes na história. "Este foi o commit exato que usamos para esta versão naquela quinta-feira chuvosa quando o servidor de compilação quebrou". Se você usar um branch ao invés de uma tag, você nunca saberá qual commit exato você usou. Você só sabe "Lançamos a versão 1.1.0 em algum lugar deste branch", a menos que anote manualmente o hash exato para esse commit, que é o motivo pelo qual você usa tags em primeiro lugar :)
fonte
Além das outras respostas, aqui estão meus 2 centavos.
Resposta curta: Use tags para versões de lançamento
Resposta longa: Eu acredito que usar tags para versão de lançamento especificamente é melhor do que usar branches. Se você precisar atualizar o relase, simplesmente ramifique o commit marcado e uma vez que você terminar de trabalhar naquele branch (provavelmente um branch de hotfix), crie uma nova tag no cabeçalho desse novo branch com a nova versão. Em seguida, mescle esse branch de volta em master / development porque você realmente não deve alterar uma versão de lançamento, a menos que seja um hotfix que provavelmente deva ser mesclado de volta ao seu código-fonte. Em seguida, exclua esse branch, pois ele não é mais necessário. Se você precisar aplicar outro hotfix a essa nova versão, repita as mesmas etapas.
Consulte a seção do artigo a seguir que mostra como mesclar um hotfix com o fluxo de trabalho Git do autor - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2
fonte