Comment configurer svn conflict resolution avec meld?

j'ai spécifié merge-tool-cmd = meld dans ma configuration Subversion. Quand je vais résoudre un conflit de fusion en utilisant l'option l des options de résolution de conflit présentées, je reçois le message:

meld: error: too many arguments (wanted 0-4, got 5)
The external merge tool exited with exit code 2

est-ce que quelqu'un peut diagnostiquer le problème/fournir une solution? Grâce.

26
demandé sur pmod 2011-08-31 06:42:41

3 réponses

d'Abord un avertissement! Il est très facile de finir par perdre vos éditions locales si vous vous trompez! Test test test!

je crains que le script du lien de pmod ne fonctionne pas avec svn 1.6 (courant dans Ubuntu 11.04). En mettant ensemble le code de lien de pmod et ici et conseil ici , j'ai fait ce script qui semble fonctionner ok:

#!/usr/bin/env python
# svn merge-tool python wrapper for meld
import sys
import subprocess

try:
   # path to meld
   meld = "/usr/bin/meld"

   # file paths
   base   = sys.argv[1]
   theirs = sys.argv[2]
   mine   = sys.argv[3]
   merged = sys.argv[4]

   # the call to meld
   # For older meld versions:
   # cmd = [meld, mine, base, theirs, merged]
   # New meld versions: >= 1.8.4
   cmd = [meld, mine, base, theirs, '-o', merged]

   # Call meld, making sure it exits correctly
   subprocess.check_call(cmd)
except:
   print "Oh noes, an error!"
   sys.exit(-1)

garde ça quelque part de raisonnable (par exemple, /usr/local/bin/svn-merge-meld.py ) et le rendre exécutable:

sudo chmod +x /usr/local/bin/svn-merge-meld.py

puis éditez ~/.subversion/config et décommentez la ligne merge-tool-cmd = , et mettez le chemin à votre commande.

notez que lorsqu'un conflit se produit, on vous demandera ce qu'il faut en faire. Vous devez taper un seul " l " et pour que svn exécute ce script. Lorsque vous avez terminé votre Fusion, vous devez taper un " r " pour résoudre le conflit et copier la version fusionnée dans la copie de travail.

41
répondu drevicko 2017-05-03 06:21:13

Le drevicko la réponse de est correct pour les dernières meld versions. Mais des versions plus anciennes meld sont également utilisées:

ci-dessous bash script svn-merge-meld.sh prend en charge à la fois ancienne et récente meld versions (trois des quatre arguments).

#!/bin/bash

base=${1?1st argument is 'base' file}
theirs=${2?2nd argument is 'theirs' file}
mine=${3?3rd argument is 'mine' file}
merged=${4?4th argument is 'merged' file}
version=$(meld --version | perl -pe '($_)=/([0-9]+([.][0-9]+)+)/' )    

if [[ "$version" < 1.7 ]]
then
  #old meld version 1.6.* = three input files
  cat "$mine" > "$merged"
  meld --label="Base=${base##*/}"           "$base"   \
       --label="Mine->Merged=${merged##*/}" "$merged" \
       --label="Theirs=${theirs##*/}"       "$theirs"
else
  # recent meld versions 1.7.* and above = four input files
  meld --label="Base=${base##*/}"           "$base"   \
       --label="Mine=${mine##*/}"           "$mine"   \
       --label="Merged=${merged##*/}"       "$merged" \
       --label="Theirs=${theirs##*/}"       "$theirs"
fi

N'oubliez pas chmod +x svn-merge-meld.sh .

vous pouvez aussi télécharger svn-merge-meld.sh ou le fourcher:

git clone github.com/olibre/svn-useful-scripts.git

enfin, mettez à jour votre configuration:

vi ~/.subversion/config

et activer merge-tool-cmd :

[helpers]
merge-tool-cmd = /home/....../svn-useful-scripts/svn-merge-meld.sh
9
répondu olibre 2017-05-23 12:02:39

vous devez utiliser le script d'enrubannage pour saisir et mettre des objets subversion est disponible dans l'ordre requis pour votre outil diff (cochez this ):

la clé pour utiliser des outils de différenciation BI et tri - directionnels externes (autres que GNU diff et diff3, bien sûr) avec Subversion est d'utiliser des scripts wrapper, qui convertissez les entrées de Subversion en quelque chose que votre outil de différenciation peut comprendre, et puis pour convertir la sortie de votre outil de retour dans un format que Subversion attend-le format que les outils GNU auraient été utilisés. ...

Subversion appelle des programmes de diff externes avec des paramètres appropriés pour L'utilitaire GNU diff, et s'attend seulement à ce que le programme externe retour avec un code d'erreur réussi. Pour la plupart des différences alternatives programmes, seulement les sixième et septième arguments-les chemins des fichiers que représentent les côtés gauche et droit de la diff, respectivement-sont de intérêt.

c'est très bien décrit ici

2
répondu pmod 2011-08-31 07:46:05