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.