O inconveniente de mesclar no SVN antes da v1.5 agora está obsoleto quando a falta de metadados não é mais o caso?


11

Estou começando com o SVN e muitas fontes dizem que a fusão é muito difícil no SVN, em comparação com as ferramentas DVCS. As perguntas mais recentes que pude encontrar aqui no SE são de 2012.

Às vezes, há uma menção de que o motivo é que o SVN anterior à v1.5 não tinha metadados, mas o SVN está na versão 1.8.9 agora.

Dado que o SVN agora é muito mais maduro que a v1.5, e especialmente o fato de não termos usado o SVN 1.5, não sofremos com a falta mencionada de metadados - ainda há muita validade nesses argumentos contra o SVN?

Entendo que o DVCS tem uma abordagem completamente diferente, que muitas vezes é mais desejável, mas para aqueles que "precisam" usar o SVN por qualquer motivo, a fusão não é mais um "inferno", é?


3
@ TorbenGundtofte-Bruun - Não tenho tempo agora para dar essa resposta, mas direi "não tema SVN". Tem limitações, mas o DVCS também.
precisa saber é o seguinte

Respostas:


15

Funciona bem se você se ater aos casos simples , mas existem alguns complexos que não.

As limitações em que consigo pensar:

  • Só pode encontrar o ancestral mais recente se estiver em um dos ramos envolvidos. Então, se você criar branches/thise branches/thattanto trunke, em seguida, tentar mesclar branches/thispara branches/that, ele não saberá o que fazer. O que significa que você só pode mesclar ramificações de ou para seus pais. Você pode encontrar isso se iniciar duas ramificações de recursos e depois perceber que os recursos são interdependentes e precisam combiná-los.

  • Embora afirme que pode rastrear renomeações, mesclar ramificações quando os arquivos foram movidos de um lado e modificados do outro lado nem sempre encontra os arquivos certos para mesclar, e corrigi-los manualmente é um pouco entediante, pois não deixa as informações necessárias em qualquer lugar. mão.

  • Os arquivos adicionados às vezes causam conflitos espúrios em mesclagens posteriores.

  • Como o subversion não possui um conceito separado de ramificação, você pode mesclar apenas uma subárvore de um projeto e isso pode levar a uma grande confusão rapidamente. É altamente recomendável ter sempre o cuidado de mesclar ramificações completas. Infelizmente, por algum motivo, às vezes as propriedades das informações de mesclagem aparecem nos subdiretórios, mesmo que pareçam supérfluas e a mesclagem foi realizada corretamente em todo o ramo.

  • Por último, mas não menos importante, é lento . As mesclagens em um projeto de qualquer tamanho sério geralmente levam minutos, onde a maioria do DVCS pode fazê-lo em menos de um segundo.


+1, ótima resposta. O ponto em relação ao ancestral comum é algo que terei que observar. Você tem alguma referência para esses fatos?
Doval

1
@Doval: Experiência.
Jan Hudec

possivelmente também vale a pena mencionar que o svn também não tem um conceito separado de tags
jk.

Em relação ao seu primeiro marcador (obrigado por uma explicação muito clara!), Isso não pôde ser resolvido usando um ramo de acumulação que tem o mesmo ponto de ramificação dos ramos de recurso? (com base no Vance98 ) O problema realmente acontece quando os dois ramos de recursos têm pontos de ramificação diferentes?
Torben Gundtofte-Bruun 12/08/14

@ TorbenGundtofte-Bruun: O ancestral comum mais recente não precisa ser um ponto de ramificação. Você pode encontrá-lo e dizer ao subversion para aplicar alterações entre revisões de pinos específicas. Mas o problema é que dá muito trabalho e você precisa perceber que precisa fazê-lo, porque o subversion não necessariamente levanta as mãos dizendo que não pode se fundir. Em vez disso, ele pode encontrar um ancestral comum que não é mais recente e gerar muitos conflitos.
Jan Hudec

1

Pela minha experiência, a mesclagem no SVN foi 'corrigida' na versão 1.6. Eu trabalho no Mercurial e no SVN e, desde a versão 1.6 do SVN, a mesclagem parece ser a mesma quantidade de trabalho nas duas plataformas. A única exceção pode ser que você deve se lembrar de fornecer a --reintegrateopção ao mesclar de uma ramificação para o tronco usando o SVN.

Esta é apenas a minha experiência operacional. Não sei nada sobre os internos do SVN.


2
1.8 pode finalmente detectar o caso "reintegrar", felizmente. Mas isso só cuida do ancestral comum mais recente em local ou remoto. Ainda não o encontra no terceiro ramo.
Jan Hudec
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.