Git não criando commit de mesclagem ao mesclar tag assinada / anotada

1

Espero que o Git crie uma consolidação de mesclagem quando eu mesclar uma marca assinada ou anotada, mas em vez disso, ela avança rapidamente o ponteiro da ramificação. Estou usando o Git versão 2.17.0 no Tumbleweed do openSUSE que vem com ele.

De acordo com a página de manual de git-merge(1) , ele deve criar uma consolidação de mesclagem no caso de mesclar uma tag assinada / anotada:

--no-ff Create a merge commit even when the merge resolves as a fast-forward. This is the default behaviour when merging an annotated (and possibly signed) tag that is not stored in its natural place in refs/tags/ hierarchy.

A sequência de comandos que eu emiti é assim:

git init foobar
cd foobar
git commit --allow-empty -m 'Empty root commit'
git checkout -b feature
git commit --allow-empty -m 'Feature one commit ahead of master'
git tag -a -m 'Feature ready for non fast-forward merge' ready-to-merge-feature
git checkout master
git merge ready-to-merge-feature

Infelizmente e inesperadamente, a mesclagem da tag anotada ready-to-merge-feature resulta em uma mesclagem de avanço rápido em vez de criar uma confirmação de mesclagem. O mesmo comportamento inesperado que observo com uma tag assinada em vez de uma anotada.

As minhas suposições estão erradas? Estou fazendo algo errado? O que seria uma solução?

    
por Tim Friske 26.05.2018 / 13:37

1 resposta

0

Observe a parte da manpage que você citou que eu coloquei em negrito abaixo:

This is the default behaviour when merging an annotated (and possibly signed) tag that is not stored in its natural place in refs/tags/ hierarchy.

Com a seqüência de comando que você deu, a tag estaria em seu lugar natural, então as condições para esse padrão não se aplicariam.

Este padrão foi posto em prática para ajudar a buscar uma tag de um repositório de contribuidores como FETCH_HEAD no repositório do mantenedor. Essas tags provavelmente serão efêmeras, portanto, se tiverem conteúdo (uma anotação e / ou assinatura), geralmente é bom preservar essas informações em um commit de mesclagem. Mas, as tags que já estão em refs/tags/ provavelmente farão parte do estado permanente do projeto e, portanto, o conteúdo deve permanecer disponível sem precisar ser transferido para um commit.

A solução mais simples provavelmente seria usar explicitamente a opção --no-ff .

    
por 05.06.2018 / 16:24

Tags