Question

Quand j'ai rencontré un conflit, j'ai essayé d'utiliser git-mergetool pour le résoudre. Je tapais:

>git mergetool -t vimdiff

Il a ouvert vimdiff à 4 voies, et non à 3 voies. Mes fenêtres fendus en regard vimdiff comme:

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

Quels sont-ils? Je veux un diff 3 voies: fichier cible, fichier de fusion et fichier de travail. Comment dois-je configurer mon git ou vimdiff?

Était-ce utile?

La solution

Comme alternative, avez-vous pensé à utiliser fugitif ?

Je ne vais pas vous mentir; fugitive.vim peut très bien être le meilleur emballage Git de tous les temps.

Il y a un excellent vimcast, Fugitive.vim - la résolution des conflits de fusion avec vimdiff , par Drew Neil. Cela fait partie d'une série sur fugitif.

Le Vimcasts site est un bon endroit pour en savoir plus sur vim.

Pour utiliser fugitive comme vous mergetool vous pouvez utiliser ce qui suit.

git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive

. Remarque: vous pouvez modifier vim à mvim ou gvim

Fugitive a beaucoup plus à offrir que juste être un script d'outil de fusion alors assurez-vous de lire la documentation et / ou vérifier les vimcasts.

Autres conseils

Après beaucoup de recherches pour l'émission mergetool avec vimdiff et seulement 3 fenêtres, je suis venu avec cette configuration, qui me permet de choisir quand je veux 3 fenêtres ou les fenêtres par défaut 4:

git config --global merge.tool vimdiff
git config --global alias.mt mergetool

git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
git config --global alias.m3 'mergetool -t merge3'

Maintenant, vous pouvez commencer à 3 fenêtres juste en tapant:

git m3

Et la valeur par défaut (4 fenêtres) seront fonctionne toujours comme prévu avec:

git mt

En outre, vous probablement à ajouter ces lignes à la fin de votre ~/.vimrc ou /etc/vim/vimrc

 " shortcuts to vimdiff
 let mapleader=','
 let g:mapleader=','

 if &diff
    map <leader>1 :diffget LOCAL<CR>
    map <leader>2 :diffget BASE<CR>
    map <leader>3 :diffget REMOTE<CR>
 endif

Cela va créer des raccourcis comme ,1 à saisir de gauche, ,3 à saisir de droite (dans les deux modes), ainsi que ,2 à saisir de la base (fenêtre centrale) en mode 4 fenêtres.

Cela aide beaucoup!

Mon fichier ~/.gitconfig ressemble à ceci:

[user]
        name = Dr Beco
        email = my@email
[merge]
        tool = vimdiff
[mergetool "merge3"]
        cmd = vim -d -c \"wincmd l\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"
[alias]
        lo = log --pretty=format:\"%h %ce %cd %s\" --graph
        co = checkout
        ci = commit
        cm = commit -a -m
        st = status
        br = branch
        m3 = mergetool -t merge3
        mt = mergetool
[diff]
        tool = vimdiff

J'espère que cela vous aide (et ceux qui arrivent à ici).

Modification d'un peu les commandes de cette page :

git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
  • 'Fusionné' serait votre copie de travail.
  • « Local » le fichier qui se trouve dans la branche que vous essayez de faire les modifications
  • « à distance » le fichier de la branche que vous essayez de fusionner avec.

Et puis vous exécutez la commande:. git mergetool

Remarque :. J'utilise fugitif aussi et recommande fortement

Remarque: si vous ne pouvez utiliser que 3 Windows comme décrit dans Dr Beco 's answer
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'),
le mode 4-fenêtres est renforcée avec git 2.8 (Mars 2016)

Voir commettras 2300328 (29 janvier 2016) par Dickson Wong (diwo)
(Fusionné par Junio ??Hamano C - gitster - commit 82c17b7 17 Fév 2016)

Le backend vimdiff pour « git mergetool » a été modifié pour organiser et des tampons de numéro dans l'ordre correspondrait à l'attente de majorité des gens qui lisent de gauche à droite, puis de haut en bas et assign tampons 1 2 3 4 « mentalement » aux fenêtres de fusion à distance de base locale basée sur cet ordre.

En interne, git va maintenant utiliser:

"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
            "$LOCAL" "$BASE" "$REMOTE" "$MERGED"

au lieu de:

"$merge_tool_path" -f -d -c 'wincmd J' \
        "$MERGED" "$LOCAL" "$BASE" "$REMOTE"

mergetool: réordonner les tampons vim / gvim diffs dans trois voies

Lors de l'appel par défaut (g) vimdiff fusion à trois voies, le fichier fusionné est chargé en tant que premier tampon mais déplacé vers le bas en tant que quatrième fenêtre.
Cela provoque un décalage entre les commandes de vim qui fonctionnent sur la fenêtre positions (par exemple CTRL - W_w ). et celles qui opèrent sur l'indice de tampon (par exemple faire / dp )

Ce changement réordonne les tampons d'avoir le même indice que les fenêtres en en gardant la valeur par défaut du curseur sur le résultat de la fusion comme la fenêtre du bas.

Je vais deuxième recommandation fugitif.

Vous pouvez également essayer splice.vim . Il est un plug-in conçu pour agir Vim comme solution de remplacement git ou Mercurial mergetool. Il vous permet de facilement mélangez les différentes vues du conflit. Il est également très rapide, simple et fait un bon travail à faire fusionner plus intuitive. Voici un screencast .

Les fichiers que vous avez énumérés sont:

  1. Le fichier local contenant le conflit.
  2. Le fichier dans la branche que vous fusionnez dans.
  3. Le fichier dans la branche que vous fusionnez de.
  4. Le fichier tel qu'il était à la fois branche noeud ancesestor. Ce fichier est très utile pour déterminer ce qui se passe!

Hope this helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top