La 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:
- Exécuter une git mergetool
- À l'invite, tapez Entrer pour lancer mon outil de comparaison (Fusionner ou FileMerge, selon l'ordinateur)
- Résoudre les conflits
- Enregistrer les modifications
- Fermer l'outil diff
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.
- Vous pouvez également exécuter
git mergetool -y
d'ignorer les instructions entre les deux. Vous pourriez encore avoir à fermer la mergetool, mais vous n'avez pas à aller vers le terminal et appuyez sur return pour chaque nouvelle fusion. - Si vous êtes en train de faire un git merge d'un tas de fichiers et c'est tout ce que vous avez à vous inquiéter, vous n'avez rien à craindre.
- c'est la meilleure réponse à accélérer la fusion des conflits de processus.
Vous devez vous connecter pour publier un commentaire.
À première vue, il ne semble pas possible de réutiliser un externe outil de comparaison de session.
La
git-mergetool
de la documentation stipule clairement:De sorte que 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.
Qui semble être une forte incitation à réduire le nombre de conflits sur chaque fusion/rebase une tente 😉 (quel que soit le VCScs outil utilisé)
Remarque:
Deux autres git externe diff outils de paramètres ("la mise en place de comparaison et de fusion des outils pour Git sur Windows" et "la mise en place SourceGear DiffMerge avec Git") ne donne pas plus d'espoir quand il viennent à pas de clôture externes outil de comparaison...
Si votre mergetool de choix prend en charge l'ouverture des fichiers dans une instance existante, vous pouvez spécifier la commande dans votre git config:
git mergetool
puis exécute votre commande personnalisée, puis vous invite à savoir si le fichier a été fusionné avec succès (en lieu et place de la recherche à un code de sortie).Un exemple, j'ai juste bidouillé pour vimdiff:
Cela fonctionne assez bien, je peut commencer à l'utiliser moi-même!
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.
git add <file>
où <fichier> a des conflits de fusion signifie "j'ai résolu cette fusion". Pour obtenir un diff avant a accepté les modifications que vous pouvez déjà fairegit add -p
.git-mergetool-help
n'est pas clair sur l'endroit où $a FUSIONNÉ vie, mais je suppose qu'il pourrait/devrait être dans le travail normal de l'arbre. Malgré tout, quelqu'un doit nettoyer les trois fichiers temporaires,$BASE
,$LOCAL
et$REMOTE
.