Come utilizzare Visual Studio Code come editor predefinito per Git MergeTool


121

Oggi stavo cercando di utilizzare il git mergetoolprompt dei comandi di Windows e mi sono reso conto che per impostazione predefinita era utilizzare Vim , il che è interessante, ma preferirei VS Code .

Come posso avere la funzione Visual Studio Code come GUI per la gestione dei conflitti di unione (o anche come strumento diverso) per Git?

Risposte:


240

A partire da Visual Studio Code 1.13 Better Merge è stato integrato nel nucleo di Visual Studio Code.

Il modo per collegarli insieme è modificare il tuo .gitconfige hai due opzioni .

  1. Per fare ciò con le voci della riga di comando, inserisci ognuna di queste: (Nota: sostituire "con 'su Windows Git Bash, macOS e Linux come chiarito da Iztok Delfin ed e4rache)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd "code --wait $MERGED"
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"
  2. Per fare ciò incollando una riga nel .gitconfig con Visual Studio Code .

    • Esegui git config --global core.editor "code --wait"dalla riga di comando.
    • Da qui puoi inserire il comando git config --global -e. Dovrai incollare il codice nel "Blocco extra" di seguito.

      [user]
          name = EricDJohnson
          email = cool-email@neat.org
      [gui]
          recentrepo = E:/src/gitlab/App-Custom/Some-App
      # Comment: You just added this via 'git config --global core.editor "code --wait"'
      [core]
          editor = code --wait
      # Comment: Start of "Extra Block"
      # Comment: This is to unlock Visual Studio Code as your Git diff and Git merge tool
      [merge]
          tool = vscode
      [mergetool "vscode"]
          cmd = code --wait $MERGED
      [diff]
          tool = vscode
      [difftool "vscode"]
          cmd = code --wait --diff $LOCAL $REMOTE
      # Comment: End of "Extra Block"
      

Ora dalla tua directory Git viene eseguito un conflitto git mergetoole, tada, hai Visual Studio Code che ti aiuta a gestire il conflitto di unione! (Assicurati solo di salvare il file prima di chiudere Visual Studio Code.)

Accetta modifiche in arrivo chiunque?

Per ulteriori letture sull'avvio codedalla riga di comando, consultare questa documentazione .

Per ulteriori informazioni, git mergetoolconsulta questa documentazione .


3
C'è una riga sopra <<<< Head, che viene inserita che elenca le opzioni: "Accetta modifica corrente | Accetta modifica in arrivo | Accetta entrambe le modifiche | Confronta modifiche" e credo che la inserisca in ogni sezione delle modifiche rilevate nel file . Ma all'interno di una sezione se desideri unire un po 'di questo e un po' di quello a mano, credo che faresti quella modifica nel tuo locale e poi sceglierai l'opzione "Accetta modifica corrente". Quindi il flusso di lavoro ti fa fare un passo indietro per fare un passo avanti. Se altri risolvono il problema in un modo diverso, inviaci un messaggio qui per informarci
Eric D. Johnson

3
Ottengo l'errore unknown tool: vscode... Sono abbastanza sicuro di chiamare VsCode dalla riga di comando che devi usare codeinvece divscode
Kolob Canyon

19
Inoltre, questo non funziona per me. Si apre semplicemente VsCode e nessun file viene mai visualizzato
Kolob Canyon

1
Quello che vorrei fare è "giff difftool mybranch master" e avere il codice VS aperto con il diff di tutti i file modificati. In questo momento, ne aprirà solo uno e aspetterà che tu lo chiuda.
Pluc

1
Oh sì, lo so, ma non ha la flessibilità che sto cercando come ottenere un diff tra due commit o due rami. E se lo fa, la navigazione in git in vs code è piuttosto orribile secondo me. Mi piacciono le differenze e l'unione dell'interfaccia utente. Stavo andando e ho visto il git difftool -dper un diff di directory. Domani controllerò come funziona.
Pluc

23

Ho dovuto sostituire le virgolette doppie con virgolette semplici:

  git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

affinché funzioni correttamente (con virgolette doppie, $ LOCAL e $ REMOTE vengono sostituiti dai rispettivi valori).

Questo è necessario se stai usando Git Bash per Windows invece del prompt dei comandi di Windows.


1
Non per me. L'ho appena fatto su Windows utilizzando il prompt dei comandi. Forse stai usando qualcosa di diverso? In tal caso, suggerisco di aggiungere quale ambiente stai utilizzando in modo che altri con lo stesso ambiente sappiano che dovranno apportare questa modifica.
Todesengel

1
@ e4rache e @ Iztok-Delfin quello che hai elencato qui è contenuto utile ma l'hai accidentalmente reso una risposta, quando è davvero un commento. Sono sicuro che hai avuto problemi perché non avevi il punto 50 su SO per consentirti di commentare, che è una specie di problema del flusso di lavoro del sito che dovrebbe forse essere esaminato. Comunque, grazie per aver contribuito, e ho aggiunto il tuo suggerimento nella mia risposta sopra. Grazie per aver aiutato coloro che vengono più tardi e utilizzano Git Bash:^)
Eric D. Johnson

@ eric-d-johnson Volevo assolutamente fare un commento invece di una risposta. (scusa, sono nuovo in questo sito) e comunque stavo usando bash su Linux. C'è un modo per trasformare questa risposta in un commento?
e4rache

@ e4rache Non conosco un modo per renderlo un commento, ma forse un moderatore lo vedrà e ci darà alcuni suggerimenti (suggerimento, suggerimento). Se avessi i 50 punti, potresti fare un commento sulla risposta accettata ed eliminare questa, quindi una volta diventato una rock star SO con tonnellate di punti puoi tornare qui e fare qualsiasi cosa ti renda felice e ti riporti bei ricordi di come tutto è iniziato.
Eric D. Johnson,

1
@mohamedghonemi Buon feedback. Ho aggiornato la spiegazione in alto per macOS e Linux ora per ricordarmi di utilizzare le virgolette singole '.
Eric D. Johnson il

2

Nel caso in cui qualcuno volesse risolverlo in Visual Studio, un'altra opzione sarebbe farlo tramite Visual Studio: Team Explorer -> fare clic sull'icona Home => pulsante Impostazioni => espandere la sezione Git => fare clic su Impostazioni globali

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


Visual Studio non è equivalente a Visual Studio Code. Il modo in cui vengono eseguite impostazioni come questa è molto diverso. Vedi stackoverflow.com/a/33798601 per le differenze
jwd630 il

1
@ jwd630 So che il codice VS è diverso da VS. Ho avuto questo problema in VS ma non sono riuscito a trovare una soluzione per questo, quindi ho pensato che sarebbe stato meglio pubblicarlo nel caso qualcuno stia sperimentando questo problema. Non c'è bisogno di votare per difetto.
Daniel B,

2

Oltre all'eccellente risposta esistente , dovresti aprire VS Code in una nuova finestra aggiungendo -nalla riga di comando.

Quindi il tuo git config --global --editsembra qualcosa del genere.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE                                                    

1

Utilizzando il manuale puoi trovare un argomento interessante:

git difftool --help 
-x <command>, --extcmd=<command>
       Specify a custom command for viewing diffs.  git-difftool ignores the configured defaults and runs $command $LOCAL $REMOTE when this option is specified.
       Additionally, $BASE is set in the environment.

Con queste informazioni puoi facilmente utilizzare il seguente comando senza toccare la configurazione git:

git difftool -x "code --wait --diff" 

Domanda simile qui

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.