3 votes

Git mergetool vimdiff diff3 view changed showing only "LOCAL" files

Lors de la résolution d'un conflit de fusion à l'aide de Git et Vim comme mergetool, j'obtiens (soudainement) un point de vue totalement différent de celui auquel je m'attendais et auquel je suis habitué. Dans le passé, j'ai suivi cet article de blog où le résultat est une vue avec quatre fenêtres : LOCAL | BASE | REMOTE puis le fichier ci-dessous. Maintenant, j'obtiens également quatre Windows, mais LOCAL et ensuite LOCAL | LOCAL | file .

Je n'ai pas été en mesure de déterminer si le problème se situait au niveau des Git o Vim . J'ai supprimé mon .gitconfig ainsi que la .vimrc mais ni l'un ni l'autre n'ont aidé. Ce qui a finalement aidé, c'est de déguiser le HOME pour les Git via cette commande :

$ git merge octodog
$ HOME=  git mergetool

Je suppose que ce comportement est lié à une nouvelle version logicielle de l'un ou des deux outils, car je n'ai jamais connu cela par le passé. Le problème est également indépendant du répertoire et de l'hôte, il se produit également sur une autre machine.

Les versions :

$ git --version
git version 2.37.1
$ vim --version
VIM - Vi IMproved 9.0

Exemple de travail minimal (compressé à partir de l'article du blog) :

$ cd $(mktemp -d)
$ git init
$ # ––– config mergetool
$ git config merge.tool vimdiff
$ git config merge.conflictstyle diff3
$ git config mergetool.prompt false
$ # ––– create merge conflict
$ echo -e 'cat\ndog\noctopus\noctocat' > animals.txt
$ git add animals.txt
$ git commit -am 'Initial commit'
$ git checkout -b octodog
$ sed -i 's/octopus/octodog/' animals.txt
$ git commit -am "Replace octopus with an octodog"
$ git checkout master
$ sed -i 's/octopus/octoman/' animals.txt
$ git commit -am "Replace octopus with an octoman"
$ # ––– trigger behavior
$ git merge octodog
$ git mergetool

Que puis-je faire pour retrouver la vue correcte des différences ?

0voto

Ingo Points 101

Il s'agit d'un bug de git 2.37 (voir ici) : https://lore.kernel.org/git/YshkFWZfBMbuN%2FtI@zacax395.localdomain/t/#r8aa35632787d0df77458137267135c7a6c0d683d ). Il y a eu une réimplémentation de la façon dont vimdiff est appelé, cf. le changelog :

 * "vimdiff[123]" mergetool drivers have been reimplemented with a
   more generic layout mechanism.

Cette réimplémentation ne semble pas prendre en compte la splitbelow et splitright en tenant compte des options de l'UE.

Comme solution de contournement, vous pouvez soit rétrograder vers la version git 2.36 (comme proposé dans les commentaires par @romainl) ou désactiver la fonction splitbelow et splitright jusqu'à ce qu'un correctif soit publié. Il semble que le problème (et une solution potentielle) soit déjà connu de l'auteur du pilote mergetool, et il est donc à espérer qu'il sera bientôt résolu.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X