53 votes

Fusion avec "git mergetool"

J'ai trouvé git mergetool d'être un utilitaire très pratique pour la fusion des diff visuellement, mais la façon dont je vais le sujet il me semble vraiment bancale. Essentiellement, mon processus ressemble à ceci lorsque les conflits sont signalés:

  1. Exécuter un git mergetool
  2. À l'invite, tapez Enter pour lancer mon outil de comparaison (Fusionner ou FileMerge, en fonction de l'ordinateur)
  3. Résoudre les conflits
  4. Enregistrer les modifications
  5. Fermez l'outil de comparaison

Si j'ai plus d'un conflit, rincer, répéter. Yep, c'est moi l'ouverture et la fermeture de mon visualisateur une fois pour chaque conflit dans la fusion. Depuis qu'il est lancé à partir de la ligne de commande, la fermeture c'est la seule façon que je connaisse pour indiquer à git mergetool que j'ai résolu ce conflit en particulier et qu'il peut passer à la suivante.

Il y a certainement une meilleure façon, mais je n'ai aucune idée. Li'l aider, s'il vous plaît? Ce processus semble fou inefficace.

Merci.

34voto

VonC Points 414372

À première vue, il ne semble pas possible de réutiliser un externe outil de comparaison de session.

L' git-mergetool documentation indique clairement:

Si la coutume outil de fusion indique correctement la réussite d'une fusion de la résolution avec son code de sortie, puis la variable de configuration mergetool.<tool>.trustExitCode peut être définie sur true.
Sinon, git-mergetool invite l'utilisateur à indiquer la réussite de la résolution, selon la coutume de l'outil a quitté.

Ainsi, le code de sortie (ou la validation de l'utilisateur après la sortie de l'outil diff) est nécessaire, ce qui implique que l'utilisateur d'abord fermer l'externe outil de comparaison.

Ça me semble être une forte incitation à réduire le nombre de conflits sur chaque fusion/rebase une tente ;) (quel que soit le VCScs outil utilisé)

Note:
Deux autres git externe diff outils de paramètres ("Configuration de comparaison et de fusion des outils pour Git sur Windows" et "Configuration de SourceGear DiffMerge avec Git") ne donne pas plus d'espoir quand il viennent à la non fermeture de l'externe outil de comparaison...

22voto

Brian Phillips Points 7023

Si votre outil de fusion de votre choix prend en charge l'ouverture de fichiers dans une instance existante, vous pouvez spécifier la commande dans votre configuration git:

 % git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE'
% git config merge.tool whatever_you_want
 

git mergetool exécutera ensuite votre commande personnalisée, puis vous indiquera si le fichier a été fusionné avec succès (au lieu de regarder un code de sortie).

Un exemple que je viens de pirater pour vimdiff:

 % git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE<CR>:set buftype=nowrite<CR>:vertical diffsplit $PWD/$MERGED<CR>:vertical diffsplit $PWD/$LOCAL<CR>:set buftype=nowrite<CR><C-W>l"'
 

Cela fonctionne assez bien, je peux commencer à l'utiliser moi-même!

12voto

Charles Bailey Points 244082

Le problème pour mergetool est qu'il utilise délibérément une interface de ligne de commande pour lancer une session de fusion et attend la commande appelée à revenir à déterminer lorsque l'utilisateur conduit de fusion est terminée.

La plupart de fusion ne fournissent pas les outils en ligne de commande mécanisme pour le démarrage d'une session de fusion dans un processus en cours d'exécution avec un moyen pour déterminer si la résolution a été achevée et réussie ou non.

Il est concevable que certains de fusion et d'outils peut fournir cette fonctionnalité via un wrapper de commande et un certain type de l'IPC, mais il serait excessivement outil spécifique et difficile à mettre en œuvre dans le générique mergetool programme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X