Pergunta

Tenho ouvido muitas coisas boas sobre os sistemas DVCS, em particular sobre o bazar.Além do conceito de repositório distribuído, vejo duas vantagens principais sendo alardeadas:a mesclagem é melhor automatizada e a renomeação é feita corretamente.

Alguém poderia me indicar algum texto explicando como exatamente as melhorias funcionam?Como o bazar sabe que renomeei um arquivo?E se eu renomear dois arquivos como parte do mesmo commit?O que acontece quando eu refatoro colocando metade do conteúdo do arquivo em um novo arquivo, recuando tudo e perdendo alguns espaços em branco em quase todas as linhas?

Em outras palavras, gostaria de ouvir pessoas que usam o bazar (ou outro DVCS) na vida real, ou pessoas que sabem como ele (elas) funciona.A fusão é realmente muito melhor?E como isso é alcançado?


Pergunta relacionada, com uma resposta útil:

Por que ramificar e mesclar é mais fácil no Mercurial do que no Subversion?

Foi útil?

Solução

A mesclagem não é intrinsecamente melhor no DVCS, apenas eles seriam praticamente muito difíceis de usar se a ramificação/mesclagem não funcionasse corretamente (o svn provavelmente não implementa a ramificação/mesclagem corretamente), porque em vez de fazer um checkout, você está criando uma nova ramificação sempre que você começar a trabalhar em um projeto a partir de um código existente.Acho que alguns SCS proprietários e centralizados lidam com mesclagem/ramificação corretamente.

A forma como funciona para todos eles é registrar cada commit em um Gráfico Diretamente Acíclico (DAG), e a partir disso você tem diferentes estratégias de mesclagem disponíveis.Aqui você pode encontrar mais informações:

http://revctrl.org/CategoryMergeAlgorithm

Pelo menos hg, bzr e git podem usar utilitários de mesclagem externos.

Outras dicas

O DVCS consegue melhores mesclagens rastreando as revisões principais das mesclagens.No Subversion, quando você mescla uma ramificação em outra, você perde informações sobre a origem da mesclagem.Em um DVCS como Bazaar ou Git, a revisão "mesclada" termina com duas revisões pai.

A renomeação é tratada de forma diferente entre DVCS.O Git, por exemplo, não rastreia a renomeação porque isso não era importante para Linus.O Mercurial os registra como "copiar arquivo antigo para novo, excluir antigo". De acordo com Mark Shuttleworth, fundador da Canonical, Darcs e Bazaar são os únicos DVCS que lidam com a renomeação de arquivos corretamente.

Como o bazar sabe que renomeei um arquivo?

As renomeações são especificadas pelo usuário, assim como adicionar ou remover arquivos.Use o "bzr rename <old> <new>"comando para marcar arquivos ou diretórios para renomeação.Se você já renomeou um arquivo na árvore, você pode usar o "--after"opção.

E se eu renomear dois arquivos como parte do mesmo commit?

Então você digita "bzr rename <old> <new>" uma vez para cada arquivo.O Bazaar não tenta adivinhar quais arquivos foram renomeados.

O que acontece quando eu refatoro colocando metade do conteúdo do arquivo em um novo arquivo, recuando tudo e perdendo alguns espaços em branco em quase todas as linhas?

Então você digita "bzr add" no novo arquivo, já que você não está realmente renomeando-o.

A seguir está uma discussão sobre como darcs (http://darcs.net) lida com patches - http://darcs.net/manual/node9.html.

Não estou familiarizado com o bazar, mas o git não rastreia renomeações de arquivos.Para o git, isso parece uma exclusão e uma adição.Porém, o git é inteligente o suficiente para ver que o conteúdo do arquivo já existe em seu repositório e rastreará sua posição no sistema.Se você dividir ou mesclar arquivos, será inteligente o suficiente para controlar segmentos de código (blobs) e armazenar essas informações também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top