Como eu “mesclo” dois arquivos de texto?

13

Eu recentemente atualizei do Ubuntu 12.04 para o 12.10 e em um ponto, ele encontrou um conflito no arquivo de configuração do Apache em apache2.conf . Eu não me dei uma opção de mesclagem naquele momento, então apenas rejeitei o novo arquivo e o instalador salvou o novo arquivo como apache2.conf.dpkg-dist .

Eu posso diferenciar os dois arquivos com diff apache2.conf apache2.conf.dpkg-dist e obter apenas as linhas que são diferentes. Mas eu quero mesclar manualmente os dois tipos de como resolver conflitos de mesclagem no SVN ou git. Como posso fazer isso?

    
por Steven Xu 25.10.2012 / 20:57

3 respostas

7

Use vimdiff se gostar de vim . Caso contrário, diffuse também funciona bem.

    
por 25.10.2012 / 20:59
2

O controle de versão tem mais informações disponíveis quando resolve conflitos: ele não tem apenas sua versão e a versão do outro cara, mas também o ancestral comum, e assim ele pode fazer uma mesclagem de três vias . Aqui, o ancestral comum é a versão original do arquivo de configuração na distribuição ou a versão oficial que você mesclou pela última vez com suas alterações.

Infelizmente, nem o Ubuntu nem qualquer outra distribuição importante que conheço faz com que seja completamente perfeito fazer mesclagens de três vias quando um arquivo de configuração é atualizado. Você pode chegar perto, no entanto, com o etckeeper . Etckeeper é um add-on para o APT, a ferramenta de gerenciamento de pacotes usada pelo Debian e derivados, que gerencia /etc em uma versão sistema de controle (Bazaar, Darcs, Git, Mercurial); Ele foi portado para outros sistemas, incluindo o Yum no Fedora. Eu recomendo usar o etckeeper; Também é uma ótima maneira de acompanhar as alterações que você faz em /etc .

Alguns programas gerenciam seus arquivos de configuração com ucf , mas isso não é algo que você tenha controle como usuário.

Mais geralmente, quando você tem o ancestral e duas versões, você pode fazer uma mesclagem de três vias com o merge utilitário enviado com o RCS ou com diff3 -m de diffutils .

Existem também muitos programas interativos de diff e merge. O Emacs e o Vim têm interfaces para isso, assim como a maioria dos diff viewers .

    
por 26.10.2012 / 01:05
1

Meu favorito pessoal é kdiff3 - não sei se existe uma versão do Ubuntu para ele. De acordo com a página , ela apenas usa qt .

Com essa ferramenta, você pode mesclar dois (ou três) arquivos em um novo. Escolhendo um lado para cada diferença ou resolvendo manualmente o conflito.

    
por 25.10.2012 / 21:56