Tag for release branch on both develop and master branch?

Estou a tentar determinar a melhor maneira de terminar um ramo de lançamento no git. Eu gostaria de levá-lo para que possamos facilmente voltar, se precisarmos. Por isso, quando faço a minha junção ao ramo de desenvolvimento, crio uma etiqueta e empurro - a para o remoto assim:

Tag this release
$ git tag -a "v1.6" -m "Release v1.6"
Push to remote
$ git push origin develop --follow-tags
O que parece funcionar muito bem. No entanto, também preciso me fundir para dominar e gostaria de levá-lo lá pela mesma razão. Quando tento criar a etiqueta no lançamento, obviamente tenho um conflito. Então, até agora eu tenho criado uma etiqueta como esta:

$ git tag -a "v1.6-master" -m "Release v1.6"

isto funciona bem, mas parece que deve haver uma maneira de criar uma etiqueta e ser capaz de checar essa etiqueta em qualquer ramo que você esteja. Sinto que me está a escapar algo essencial.

 2
git
Author: Bert Alfred, 2017-06-26

5 answers

Mas parece que deve haver uma forma de criar uma etiqueta e ser capaz de verificar essa etiqueta em qualquer ramo onde esteja. Sinto que me está a escapar algo essencial.
Se quer dizer que acha que está a perder a forma de fazer com que as etiquetas se comportem como descreve... não estás. Não há nenhum. Então eu acho que o que está faltando é uma compreensão completa de como tags, branches e commits se relacionam no git.

Uma etiqueta é um ref-A pointer para um commit específico. A branch is also a ref, but it happens to be a ref that is expected to move in a particular way.

As pessoas muitas vezes querem falar sobre commits ou tags sendo "em" um ramo particular; isso não é realmente uma coisa no git (ao contrário de outros sistemas de controle de versão). Um branch aponta para um commit, e outros commits são alcançáveis (por ponteiros-pai) a partir desse commit, e uma tag pode apontar para um commit que é alcançável a partir de um ref branch... mas é só isso. Se a sua persistência topologia está de acordo com determinados pressupostos, em seguida, você pode aproximar a noção de "uma marca no ramo", dizendo que a marca aponta para uma consolidação acessível a partir do ramo e não acessível a partir do principal ramo - mas você estaria usando monte de conceitos que o git não gosta, (incluindo a noção de um "pai"ramificação).

Na verdade, quando se verifica uma etiqueta, coloca - se em estado de cabeça isolado, o que significa que já não está em nenhuma sucursal. Acho que sim. o git poderia definir uma estrutura de dados que aponta para um commit por ramo, mas não o faz.

Por isso, se quiser marcas de "versão x" em vários commits, então o que está a fazer (usando Convenções de nomes para manter várias marcas rectas) é o melhor que pode fazer. Mas eu também ecoaria os sentimentos daqueles que sugerem que as "etiquetas de lançamento em desenvolvimento" não são tão úteis como você poderia esperar.

 6
Author: Mark Adelsberger, 2017-06-26 18:55:27

Marca Para lançamento no develop e no master branch

Não. Lançamento da marca apenas em master. Ramificação para desenvolvimento, é instável.

1 mapeamento de marcas com apenas 1 hash-string de commit, se um, dois ou mais ramos tiverem a hash-string de commit, a tag ficará neste(s) ramo (s).

 3
Author: Do Nhu Vy, 2017-06-26 16:15:48
Com o Git, é um commit, não um branch, que é marcado. Dependendo do seu fluxo de trabalho, o mesmo commit pode existir em ambos Mestre e desenvolver. No entanto, dado que você tem esses dois ramos, é provável que um (merge) commit to master signifique uma liberação. Nesse caso, a coisa certa a fazer seria marcar aquele commit merge para Mestre .
 1
Author: Jamie Bisotti, 2017-06-26 17:35:20
Parece muito semelhante ao Git flow. Já viste? Os dois primeiros são o modelo de ramificação original. O último é o desenvolvimento atual que você também pode encontrar em seu repositório linux favorito. Acrescenta suporte ramificações para versões mais antigas que você precisa suportar obviamente.
 0
Author: Hoall, 2017-06-26 16:12:05

As marcas Git e os ramos são noções extremamente leves, as únicas () ( apenas) modelo que você deve ter de um histórico git é o ancestral DAG e referências (tags, branches, o que você tem) para commits atualmente particulares nele.

Por que se preocupar em marcar um commit que você pode encontrar tão (mais, na verdade) confiavelmente sem a tag? Você está atrás do último commit que foi fundido do develop para v1. 6:

merge=`git rev-list v1.6 --grep="Merge branch 'develop'" --merges -1`

Vai conseguir a fusão, e

git log -1 $merge^2

Dar-te-á o commit fundido.

 -1
Author: jthill, 2017-06-26 17:05:04