Domanda

Quando ho incontrato un conflitto, ho cercato di usare git-mergetool per risolverlo. Ho scritto:

>git mergetool -t vimdiff

Si è aperto vimdiff a 4 vie, non a 3 vie. Le mie finestre divise in look vimdiff come:

: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

Che cosa sono? Voglio un diff 3 vie: file di destinazione, file di unione e file di lavoro. Come devo configurare il mio git o vimdiff?

È stato utile?

Altri suggerimenti

Dopo un sacco di ricerca per il rilascio mergetool con vimdiff e solo 3 finestre, mi si avvicinò con questa configurazione, che mi permette di scegliere quando voglio 3 finestre o al mancato 4 finestre:

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'

Ora si può iniziare a 3 finestre semplicemente a digitare:

git m3

E il default (4 finestre) saranno ancora funziona come previsto con:

git mt

Inoltre, probabilmente vorrebbe aggiungere queste righe alla fine del vostro ~/.vimrc o /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

Questo creerà i collegamenti come ,1 per afferrare da sinistra, ,3 per afferrare da destra (in entrambe le modalità) e anche ,2 per afferrare dalla base (finestra centrale) nella modalità 4 finestre.

che aiuta molto!

I miei ~/.gitconfig aspetto di file come questo:

[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

Spero che questo ti aiuta (e chi arriva a qui).

Modifica di un po 'i comandi da questa pagina :

git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
  • 'uniti' sarebbe la vostra copia di lavoro.
  • 'locale' il file che si trova nel ramo si sta cercando di apportare le modifiche
  • 'a distanza' il file dal ramo si sta tentando di fusione con.

E poi si esegue il comando:. git mergetool

Nota :. Io uso fuggitivo anche e lo consiglio vivamente

Nota: mentre è possibile utilizzare solo il 3 di Windows come descritto in Dr Beco 's answer
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'),
la modalità 4-finestre si arricchisce con git 2.8 (Marzo 2016)

commettere 2.300.328 (29 gennaio 2016) da Dickson Wong (diwo)
(fusa per Junio ??Hamano C - gitster - in commettere 82c17b7 17 Feb 2016)

Il backend vimdiff per "git mergetool" è stato ottimizzato per organizzare e buffer numeri nell'ordine in cui corrisponderebbe l'aspettativa di maggior parte delle persone che leggono da sinistra a destra, poi verso il basso e assegnare buffer 1 2 3 4 "mentalmente" a base locale finestre unione remota basata in questo ordine.

Internamente, git utilizzerà ora:

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

invece che:

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

mergetool: riordino vim / gvim buffer in tre vie diff

Quando si richiama default (g) vimdiff a tre vie di unione, il file unito è caricato come il primo tampone ma spostato verso il basso come quarta finestra.
Ciò causa una disconnessione tra i comandi vim che operano sulla finestra posizioni (ad es CTRL - W_w ). e quelli che operano su indice tampone (ad es do / dp )

Questo cambiamento riordina i buffer di avere lo stesso indice come finestre, mentre mantenendo il default del cursore al risultato unito come la finestra in basso.

Io secondo la raccomandazione fuggitivo.

Si potrebbe anche provare splice.vim . E 'un Vim plugin concepito per agire come un git o mercurial mergetool rimpiazzo. Esso consente di rimescolare facilmente vari punti di vista del conflitto. E 'anche molto veloce, semplice e fa un buon lavoro a rendere più intuitiva la fusione. Ecco un screencast .

I file che hai elencato sono:

  1. Il file locale contenente il conflitto.
  2. Il file nel ramo si sta fondendosi in.
  3. Il file nel ramo si sta fondendo da.
  4. Il file come è stato in entrambi nodo ancesestor ramo. Questo file è molto utile per capire cosa sta succedendo!

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top