Comment utiliser le mergetool Xcode 4 de manière autonome?

8

Je dois parfois faire des git merges sur la console. Jusqu'à présent, pour résoudre les conflits, j'utilisais FileMerge de Xcode 3 (vous pouvez l'ouvrir sur la console en utilisant la commande 'opendiff'). Si des conflits apparaissent, j'utilise 'git mergetool' qui invoque automatiquement opendiff pour chacun des fichiers en conflit.

Cependant, Xcode 4 dispose d'un composant mergetool beaucoup plus agréable pour résoudre les conflits. Je crois que ce composant fait partie de l'exécutable Xcode 4, plutôt que autonome. Il vous permet de prévisualiser le fichier fusionné et de modifier directement le code fusionné au cas par cas, ce qui rend la fusion des conflits complexes incroyablement rapide et satisfaisante.

Existe-t-il un moyen d'utiliser l'outil de fusion Xcode 4 lors de l'appel de 'git mergetool' à partir du terminal?

Je ne trouve pas d'exécutable pour cet outil dans le bundle Xcode 4. Tout hack qui y parviendrait serait le bienvenu.

Ricardo Sanchez-Saez
la source
Au cas où quelqu'un d'autre serait intéressé par cette fonctionnalité: il semble qu'il n'y ait aucun moyen officiel de le faire. J'ai soumis une demande de fonctionnalité à Apple via le rapport de bogue . Voici le radar . Je suppose que c'est assez désespéré, mais on ne sait jamais. Pour toute autre personne intéressée, je suggère de manifester son intérêt en soumettant un rapport de bogue similaire à Apple.
Ricardo Sanchez-Saez

Réponses:

4

opendiff prend deux arguments de nom de fichier, et un paramètre --ancestor avec un troisième nom de fichier, pour produire un diff à trois voies, et un paramètre --merge pour dire le fichier de sortie à utiliser pour la résolution des conflits.

Alors allez:

[mergetool "opendiff"]
    cmd = "opendiff \"$LOCAL\"  \"$REMOTE\" \"$(if test -f \"$BASE\"; then echo \"--ancestor $BASE\"; else echo \"--ancestor $LOCAL\"; fi)\" --merge=\"$MERGED\" "
[merge]
    tool = opendiff

Cela devrait permettre à git d'utiliser opendiff comme outil de fusion, lorsqu'il y a des conflits de fusion.

Cela dit, je préfère de beaucoup DiffMerge de SourceGear , qui est un outil gratuit de fusion et de fusion à trois voies qui fait beaucoup mieux, la résolution de conflits orientée vers les mots. Et dans la documentation de DiffMerge, il y a quoi dire à git pour en faire l'outil de différenciation et de fusion par défaut.

Dan Ray
la source
Merci d'avoir essayé d'aider, mais Filemerge / opendiff n'est pas ce que j'essaie d'utiliser. De plus, j'ai essayé DiffMerge (et DeltaWalker pour ce que ça vaut) et je n'aime pas beaucoup son interface utilisateur. Le kaléidoscope est bien plus agréable, mais il ne propose pas de fusion / édition, juste une différence.
Ricardo Sanchez-Saez
Je suis presque sûr que Xcode 4 enveloppe simplement FileMerge. J'ai découvert la même déception à propos de Kaléidoscope.
Dan Ray
Je dirais que Xcode 4 n'enveloppe pas FileMerge. Sur FileMerge, vous ne pouvez pas modifier le fichier fusionné, il vous suffit de sélectionner le côté de la fusion que vous souhaitez utiliser pour chaque conflit. Sur le résolveur de conflits d'extraction Xcode 4, vous pouvez modifier les lignes en conflit et effectuer une extraction avec le fichier exactement comme vous le souhaitez. En outre, l'interface utilisateur est complètement différente de Filemerge.
Ricardo Sanchez-Saez
1
Kaleidoscope 2 beta a été récemment publié, et il permet l'édition en ligne des fichiers fusionnés. Vérifiez-le, c'est assez bon. La seule chose qui manque est une couleur différente pour les conflits (elle utilise la même couleur que la substitution de code pour ceux-ci).
Ricardo Sanchez-Saez
Après quelques mois d'utilisation de Kaleidoscope et bien qu'il soit généralement bon, je dois dire que c'est toujours un peu bogué et / ou déroutant, surtout par rapport au composant de résolution de conflits Xcode 4.x. J'espère toujours qu'Apple fera l'inattendu et l'implémentera comme un outil autonome invocable depuis, disons, Tower. ;-)
Ricardo Sanchez-Saez
0

Vous pouvez éditer dans l'éditeur de texte (très basique) de FileMerge en ouvrant le volet de l'éditeur - qui est fermé par défaut. Pour ouvrir l'éditeur dans FileMerge, faites glisser le point situé sous la colonne diff centrale vers le haut pour ouvrir le volet de l'éditeur.

Austin-Soft.com
la source
-1

Cela a fini par travailler pour moi

[merge]
  tool = opendiff

[mergetool]
  keepBackup = false

[mergetool "opendiff"]
  cmd = "opendiff \"$LOCAL\" \"$REMOTE\" -merge \"$MERGED\""
macek
la source
2
Opendiff est ce que Xcode 3.x a utilisé pour les fusions. Ma question concernait le composant de fusion Xcode 4.x, qui est un outil complètement différent (il permet l'édition en ligne du fichier résultant, contrairement à opendiff / filemerge). Merci quand même.
Ricardo Sanchez-Saez