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.


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)


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

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


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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.