vimdiff e unisci conflitti


14

Quando si uniscono le filiali sotto il controllo del codice sorgente, spesso si verifica un conflitto di unione con altri sviluppatori.

So che possiamo usare vimdiff per modificare il codice diff contro il controllo del codice sorgente , ma esiste anche un modo per usare vimdiff per aiutare a risolvere i conflitti di conflitto di unione.

Personalmente sono più interessato a git ma sarebbe utile capire se ci sono plugin / tecniche per altri strumenti / sistemi di controllo del codice sorgente.


Hai mai provato Meld ?
Eric Sabelhaus,

1
@EricSabelhaus: è meglio di vimdiff nel risolvere i conflitti? Questo sito tratta di porre / rispondere a domande su vim.
Martin York,

Dipende dal caso d'uso suppongo. Se sto lavorando su un codice che vive in remoto, userò sicuramente vimdiff. Se sto lavorando localmente sulla mia macchina di sviluppo, userò Meld, in quanto fornisce un'interfaccia utente ricca di funzionalità per aiutare lo sviluppatore a eseguire complesse fusioni a 3 vie.
Eric Sabelhaus,

1
@EricSabelhaus: Per me il termine feature rich UIè fuorviante; vimdiff potrebbe non avere una bella interfaccia utente, è sicuramente ricco di funzionalità. Trovo anche vim un ambiente molto più produttivo di tutti gli editor di GUI che ho usato (ma l'ho usato per molto tempo ed è stata una curva di apprendimento ripida). Sono più curioso di sapere se Meld fa qualcosa che Vim non fa e che valrebbe la pena anche solo guardare.
Martin York,

Non posso dire specificamente se ha un set di funzionalità più robusto, ma è sicuramente nello stesso regno di Vimdiff.
Eric Sabelhaus,

Risposte:


18

Normalmente uso git dalla riga di comando.

Ma quando c'è un conflitto di unione, uso Vim per risolverli (personalmente lo faccio con il plugin fuggitivo). Nota: il fuggitivo è buono per molta manipolazione di git all'interno di Vim. La mia caratteristica preferita è la differenza a 3 vie di un conflitto di unione.

git supporta questo in vimdiff tramite git mergetool. Ho installato il fuggitivo ma è possibile configurarlo manualmente (grazie @Jay Thompson).

Installazione manuale:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

L'output è leggermente diverso da quanto descritto di seguito (non l'ho usato personalmente). Ma il principio è lo stesso ma hai una quarta finestra in basso contenente il risultato.

inserisci qui la descrizione dell'immagine

Istituito con Fugitive

vim-fugitive è un plugin wrapper / integrazione git per Vim; può fare molte cose e la risoluzione dei conflitti è una di queste.

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. Visualizza 2 (a sinistra): il codice che si trovava sul tuo ramo.
  2. Visualizza 1 (al centro): il codice unito (con conflitti)
  3. Visualizza 3 (a destra): il codice che è stato unito al tuo codice.

Ora puoi estrarre e ottenere il testo dalle altre due viste nella vista centrale (che conterrà tutte le correzioni manuali). Dopo aver risolto manualmente tutti i conflitti, è sufficiente uscire da vimdiff

inserisci qui la descrizione dell'immagine

Sebbene tu possa usare :diffget <view number>e :diffput <view number>per tirare e spingere le cose tra le viste. Personalmente non lo trovo molto utile. Tutto il codice è già nella vista centrale. Quindi mi piace solo modificare quella vista manualmente fino a quando il conflitto non viene risolto. Essere in grado di vedere entrambe le versioni del codice su entrambi i lati della mia finestra dell'editor è estremamente utile.

Anche una buona demo del suo utilizzo qui


1
Se non vuoi usare o installare Fugitive per qualche motivo, puoi anche semplicemente impostare git config --global merge.tool vimdiffed eseguire git mergetoolper avviare vim in modalità diff.
Jay Thompson,

Questo supporta lo stile "diff3" dei conflitti di unione, in cui vengono mostrati gli "antenati comuni uniti"?
alxndr,

@alxndr: non avevo mai sentito parlare di diff3 prima. Ma dopo un rapido google. L'output di un conflitto di unione in git (e in altri controlli del codice sorgente che ho usato) è lo stesso di a diff3 -E. Quindi le immagini sopra sono generate da file che contengono questi marcatori.
Martin York,

Ora che guardo da vicino, il primo screenshot mostra lo stile di unione diff3; il riquadro superiore centrale "BASE" è l'antenato comune, da cui i pannelli sinistro e destro differivano.
alxndr,

1
È importante ricordare che ognuna di queste 4 viste è solo un buffer. Questo significa che puoi aprire un'altra scheda (o anche rimanere nella stessa finestra) e scegliere solo i buffer che vuoi guardare in un dato momento. Non c'è motivo di tenere aperte tutte e 4 le finestre contemporaneamente se non le si utilizzano tutte.
Cody Poll
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.