Comment «fusionner» deux fichiers texte?

13

J'ai récemment mis à niveau Ubuntu 12.04 vers 12.10 et à un moment donné, il a rencontré un conflit de fichier de configuration Apache dans apache2.conf. Je n'ai pas donné d'option de fusion à ce stade, j'ai donc simplement rejeté le nouveau fichier et le programme d'installation a enregistré le nouveau fichier sous apache2.conf.dpkg-dist.

Je peux différencier les deux fichiers avec diff apache2.conf apache2.conf.dpkg-distet obtenir uniquement les lignes qui sont différentes. Mais je veux fusionner manuellement les deux sortes de la façon dont je résous les conflits de fusion dans SVN ou git. Comment puis je faire ça?

Steven
la source
Sans un analyseur approprié, vous ne pouvez les fusionner que manuellement
daisy

Réponses:

2

Le contrôle de version a plus d'informations disponibles lorsqu'il résout les conflits: il a non seulement votre version et la version de l'autre, mais aussi l'ancêtre commun, et il peut donc effectuer une fusion à trois . Ici, l'ancêtre commun est la version d'origine du fichier de configuration dans la distribution, ou la version officielle que vous avez fusionnée pour la dernière fois avec vos modifications.

Malheureusement, ni Ubuntu ni aucune autre distribution majeure que je connais ne rend complètement transparente la fusion à trois quand un fichier de configuration est mis à jour. Vous pouvez cependant vous rapprocher avec etckeeper . Etckeeper est un module complémentaire pour APT, l'outil de gestion de paquets utilisé par Debian et ses dérivés, qui gère /etcdans un système de contrôle de version (Bazaar, Darcs, Git, Mercurial); il a été porté sur d'autres systèmes, y compris Yum dans Fedora. Je recommande d'utiliser etckeeper; c'est aussi un excellent moyen de suivre les modifications que vous apportez /etc.

Certains programmes gèrent leurs fichiers de configuration avec ucf , mais ce n'est pas quelque chose que vous contrôlez en tant qu'utilisateur.

De manière plus générale, lorsque vous avez l'ancêtre et deux versions, vous pouvez faire une fusion à trois avec l' mergeutilitaire fourni avec RCS ou diff3 -mde diffutils .

Il existe également un grand nombre de programmes de diff et de fusion interactifs. Emacs et Vim ont des interfaces pour cela, comme la plupart des téléspectateurs diff .

Gilles 'SO- arrête d'être méchant'
la source
1

Mon préféré est kdiff3- je ne sais pas, s'il existe une version Ubuntu pour cela. Selon la page d'accueil, il utilise simplement qt .

Avec cet outil, vous pouvez fusionner deux (ou trois) fichiers dans un nouveau. Soit en choisissant un côté pour chaque différence, soit en résolvant manuellement le conflit.

Nils
la source
actuellement (15.04) ubuntu a les deux kdiff3etkdiff3-qt
mchid