Usando o TortoiseSVN, como mesclar alterações do tronco para um ramo e vice-versa?

132

Eu estive lendo sobre ramificação / fusão com o Subversion 1.5 usando o excelente e gratuito Version Control with Subversion . Eu acho que entendo como usar o cliente de linha de comando do Subversion para executar as ações necessárias com mais freqüência, que são:

Atualizar ramificação com alterações do tronco

No diretório de trabalho da filial, execute:

svn merge http://svn.myurl.com/proj/trunk

Mesclar ramificação no tronco

No diretório de trabalho do tronco, execute:

svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch

No entanto, estamos usando o TortoiseSVN 1.5 como nossa interface para o Subversion. Gostaria de saber qual a melhor maneira de executar essas operações com o TortoiseSVN. A nova caixa de diálogo fornece três opções diferentes no menu principal.

  1. Mesclar várias revisões
  2. Reintegrar uma ramificação
  3. Mesclar duas árvores diferentes

Pelo que entendi, o TortoiseSVN sempre executa svn com a seguinte sintaxe.

svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH

Além disso, a reintegração de uma ramificação geralmente falha com uma mensagem informando que alguns destinos não foram mesclados e, portanto, ela não pode continuar; portanto, tive que usar a opção nº 3.

Minhas perguntas são:

  1. Como uso o TortoiseSVN 1.5 para mesclar alterações do tronco para um ramo?
  2. Como uso o TortoiseSVN 1.5 para mesclar a ramificação ao tronco, com e sem o método de reintegração?
  3. Qual das opções acima devo usar para cada uma e por quê?

EDITAR

Através de testes "dry run", descobri que a operação do Subversion na linha de comando

svn merge http://svn.myurl.com/proj/trunk

é análogo à opção 1 (Mesclar um intervalo de revisões) no TortoiseSVN, desde que eu deixe o intervalo de revisões em branco.

Ryan Taylor
fonte
Os links não foram encontrados! = /
Leonardo Costa

Respostas:

28

O comportamento depende da versão do seu repositório. O Subversion 1.5 permite 4 tipos de mesclagem:

  1. mesclar sourceURL1 [@N] sourceURL2 [@M] [WCPATH]
  2. mesclar sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH]
  3. mesclar [-c M [, N ...] | -r N: M ...] FONTE [@REV] [WCPATH]
  4. mesclar - reintegrar SOURCE [@REV] [WCPATH]

O Subversion anterior a 1.5 permitiu apenas os 2 primeiros formatos.

Tecnicamente, você pode executar todas as mesclagens com os dois primeiros métodos, mas os dois últimos habilitam o rastreamento de mesclagem do subversion 1.5.

As opções do TortoiseSVN mesclam um intervalo ou mapas de revisões para o método 3 quando o seu repositório é 1.5+ ou para o método um quando o repositório é mais antigo.

Ao mesclar recursos em uma ramificação de liberação / manutenção, você deve usar o comando 'Mesclar um intervalo de revisões'.

Somente quando você deseja mesclar todos os recursos de uma ramificação de volta a uma ramificação pai (geralmente tronco), você deve usar 'Reintegrar uma ramificação'.

E o último comando - surgir duas árvores diferentes - só é útil quando você deseja sair do comportamento normal de ramificação. (Por exemplo, comparando versões diferentes e depois mesclando a diferença para outra ramificação)

Bert Huijben
fonte
alguém poderia me ajudar com stackoverflow.com/questions/51657636/… . Esta é uma pergunta importante para a nossa equipe, precisamos de algumas idéias em torno dela.
Ankur
249

Não consegui seguir corretamente as outras respostas, aqui está mais um guia de manequins ...

Você pode fazer isso de qualquer maneira para ir trunk -> branchou branch -> trunk. Eu sempre trunk -> branchcorrigo todos os conflitos lá e depois faço a mesclagem branch -> trunk.

Mesclar tronco em uma ramificação / tag

  1. Fazer check-out da filial / etiqueta
  2. Clique com o botão direito do mouse na raiz do ramo | Tartaruga SVN | Mesclar ...
  3. Tipo de mesclagem: mescla uma série de revisões | Clique em 'Next' insira a descrição da imagem aqui
  4. Intervalo de revisão de mesclagem: selecione a URL do diretório de troncos que você copiou para a ramificação / tag. Digite as revisões para mesclar ou deixe o campo vazio para mesclar todas as revisões | clique em "Avançar" insira a descrição da imagem aqui
  5. Mesclar opções: acabei de deixá-las como padrão | clique em "Mesclar" insira a descrição da imagem aqui
  6. Isso mesclará as revisões na ramificação / tag com check-out
  7. Em seguida, confirme as alterações mescladas na ramificação / tag
icc97
fonte
4
Eu deixei de fora o "Intervalo de revisão para mesclar" e fiz um "Mesclar teste". Era o que eu precisava: a faixa foi definida automaticamente para mim (a partir de quando o ramo foi feito para a última revisão no ramo)
Lian
Ótima resposta - concisa e fácil de seguir. Funcionou para mim, mas quando eu apenas queria mesclar um único arquivo de configuração, por algum motivo, precisei fazê-lo duas vezes. Está tudo bem agora. Cheers
Winger
@Lian Fiz a mesma coisa para mesclar do tronco para o ramo; deixe o intervalo de revisão em branco se desejar que a versão mais recente dos arquivos do tronco seja mesclada com os arquivos de ramificação.
Winger
2
A versão atual do Tortoise SVN agora tem uma opção para mesclar todas as revisões em vez de deixar o intervalo de revisões em branco na etapa 4.
The Unknown Dev
1
@Onkar Alguns conflitos quase sempre acontecem. Se você tem dois ramos, por exemplo, trunke branch, em seguida, certificando-se de que você mesclar as alterações de trunkque branch, logo que possível irá evitar conflitos, tanto quanto possível. Isto significa que quando você mesclar branchpara trunknão deve haver quaisquer conflitos.
Icc97
12

Você deve usar "mesclar um intervalo de revisão".

Para mesclar alterações do tronco para uma ramificação, dentro da cópia de trabalho da ramificação, escolha "mesclar intervalo de revisões" e insira a URL do tronco e as revisões de início e fim a serem mescladas.

O mesmo da maneira oposta para mesclar um ramo no tronco.

Sobre o sinalizador --reintegrate, consulte o manual aqui: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate

Davide Gualano
fonte
1

Dê uma olhada no svnmerge.py . É uma linha de comando, não pode ser invocada pelo TortoiseSVN, mas é mais poderosa. Do FAQ :

O subversion tradicional permite mesclar mudanças, mas não "lembra" o que você já mesclou. Também não fornece uma maneira conveniente de impedir que um conjunto de alterações seja mesclado. O svnmerge.py automatiza parte do trabalho e o simplifica. O Svnmerge também cria uma mensagem de confirmação com as mensagens de log de todas as coisas que ele mesclou.

Liudvikas Bukys
fonte
6
O svnmerge.py foi desenvolvido no Subversion 1.4 e versões anteriores. O Subversion 1.5 introduziu o rastreamento de mesclagem no produto principal.
Bert Huijben 19/11/2008
0

Clique com a tecla Shift pressionada na pasta e selecione TortoiseSVN -> Mesclar tudo

Denis
fonte