Verwendung von Visual Studio Code als Standardeditor für Git

364

Wenn Sie git in der Befehlszeile verwenden, frage ich mich, ob es möglich ist, Visual Studio Code als Standardeditor zu verwenden, dh wenn Sie Commit-Kommentare erstellen und einen Unterschied einer Datei in der Befehlszeile anzeigen.

Ich verstehe, dass es nicht möglich sein wird, es für Zusammenführungen zu verwenden (zumindest im Moment), aber weiß jemand, ob es möglich ist, es zum Betrachten von Diffs zu verwenden, und wenn ja, in welchen Befehlszeilenoptionen dies erforderlich wäre die .gitconfig-Datei, um dies zu ermöglichen?

UPDATE 1:

Ich habe einen ähnlichen Ansatz versucht wie in der Vergangenheit für Notepad ++ , d. H.

#!/bin/sh

"c:/Program Files (x86)/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

Und verwendet:

#!/bin/sh

"C:\Users\gep13\AppData\Local\Code\app-0.1.0\Code.exe" "$*"

Dies führt jedoch zu einer Fehlermeldung:

C:\temp\testrepo [master +1 ~0 -0]> git commit
[8660:0504/084217:ERROR:crash_reporter_win.cc(70)] Cannot initialize out-of-process crash handler
Aborting commit due to empty commit message.
C:\temp\testrepo [master +1 ~0 -0]>

Der Code wird korrekt mit dem erwarteten Inhalt geöffnet, wartet jedoch nicht auf die Antwort, dh klicken Sie auf Speichern und schließen Sie das Fenster, um zur Eingabeaufforderung zurückzukehren.

UPDATE 2:

Ich habe gerade von einem der Entwickler gehört, die an VSCode arbeiten. Es sieht so aus, als ob diese Funktionalität derzeit nicht unterstützt wird :-(

https://twitter.com/IsidorN/status/595501573880553472

Wenn Sie daran interessiert sind, dass diese Funktion hinzugefügt wird, sollten Sie Ihre Stimmen hier hinzufügen:

http://visualstudio.uservoice.com/forums/293070-visual-studio-code/suggestions/7756482-support-git-configure-diff-and-merge-tools

UPDATE 3:

Ich wurde zuverlässig darüber informiert, dass diese Funktion vom VSCode-Team übernommen wurde, und freue mich auf eine zukünftige Version, die sie enthalten wird.

UPDATE 4:

Dank des Kommentars von @ f-boucheros unten konnte ich VS Code als Standardeditor für Commit-Kommentare, Rebase usw. verwenden. Ich würde immer noch gerne sehen, ob es möglich ist, ihn auch als Diff-Tool zu verwenden.

UPDATE 5:

Gemäß der akzeptierten Antwort auf die Frage ist dies jetzt mit der Code-Version V1.0 möglich.

Gary Ewan Park
quelle

Antworten:

673

In der neuesten Version (v1.0, veröffentlicht im März 2016 ) können Sie jetzt VS-Code als Standard-Git-Commit / Diff-Tool verwenden . Zitiert aus den Dokumentationen:

  1. Stellen Sie sicher, dass Sie über code --helpdie Befehlszeile ausgeführt werden können und Hilfe erhalten.

    • Wenn Sie keine Hilfe sehen, gehen Sie folgendermaßen vor:

      • Mac: Wählen Sie Shell-Befehl: Installieren Sie den Befehl 'Code' im Pfad aus der Befehlspalette.

        • Die Befehlspalette wird angezeigt, wenn Sie in VS Code shift+ + drücken P. ( shift+ ctrl+ Pin Windows)
      • Windows: Stellen Sie sicher, dass Sie während der Installation Zu PATH hinzufügen ausgewählt haben .
      • Linux: Stellen Sie sicher, dass Sie Code über unsere neuen .deb- oder .rpm-Pakete installiert haben.
  2. Führen Sie in der Befehlszeile aus git config --global core.editor "code --wait"

Jetzt können Sie git config --global -eVS Code als Editor für die Konfiguration von Git ausführen und verwenden. Geben Sie hier die Bildbeschreibung ein Fügen Sie Folgendes hinzu, um die Unterstützung für die Verwendung von VS-Code als Diff-Tool zu aktivieren:

[diff]
    tool = default-difftool
[difftool "default-difftool"]
    cmd = code --wait --diff $LOCAL $REMOTE

Dies nutzt die neue --diffOption, die Sie an VS Code übergeben können, um zwei Dateien nebeneinander zu vergleichen.

Zusammenfassend sind hier einige Beispiele, wo Sie Git mit VS-Code verwenden können:

  • git rebase HEAD~3 -i Ermöglicht die interaktive Neueinstellung mithilfe von VS-Code
  • git commit Ermöglicht die Verwendung von VS-Code für die Festschreibungsnachricht
  • git add -pgefolgt von efür interaktives Hinzufügen
  • git difftool <commit>^ <commit> Ermöglicht die Verwendung von VS Code als Diff-Editor für Änderungen
rexcfnghk
quelle
84
Ich fand auch das Hinzufügen --new-windowzum Befehl hilfreich. Auf diese Weise wird die Git-Operation in einem neuen Fenster geöffnet.
Jrotello
2
Wenn wir über Kommandozeile sprechen, meinen wir Ctrl+Shift+P? Meins funktioniert nicht (nicht code --helpverfügbar) und ich verstehe nicht, was bedeutet: "Stellen Sie sicher, dass Sie während der Installation" Zum Pfad hinzufügen "ausgewählt haben." Was soll ich tun, um dies zu überprüfen? Kann mir bitte jemand helfen?
Paolo Falomo
2
Beachten Sie, dass Sie ab Version 1.1 "Hot Exit" deaktivieren oder die Datei vor dem Beenden von vscode explizit speichern müssen, da git sonst keine Änderungen sieht. Wenn Sie beim Beenden daran erinnert werden möchten, zu speichern, können Sie diese Funktion deaktivieren, indem Sie Ihre Benutzereinstellungen bearbeiten: "files.hotExit": "off"Am unteren Rand Ihrer Konfiguration
einfügen
6
Ich musste git config core.editor "code -n --wait"VS Code 1.17.2 verwenden, der über eine externe Befehlszeile ausgeführt wurde. Beides codeund brachte code --waitmir das "Abbruch-Commit wegen leerer Commit-Nachricht".
Robert Calhoun
3
Und Merge ist jetzt verfügbar sowie: [merge] tool = vscode [mergetool "vscode"] cmd = code --wait $ MERGED
Sting
31

Soweit ich weiß, ist VSCode nicht mehr in AppData enthalten.

Legen Sie den Standard-Git-Editor fest, indem Sie diesen Befehl in einem Eingabeaufforderungsfenster ausführen:

git config --global core.editor "'C:\Program Files (x86)\Microsoft VS Code\code.exe' -w"

Der Parameter -w, --waitist für Fenster zu warten , um vor der Rückkehr geschlossen werden. Visual Studio Code basiert auf Atom Editor. Wenn Sie auch Atom installiert haben, führen Sie den Befehl aus atom --help. Sie werden sehen, dass das letzte Argument in der Hilfe "Warten" ist.

Wenn Sie das nächste Mal eine git rebase -i HEAD~3ausführen, wird Visual Studio-Code angezeigt. Sobald VSCode geschlossen ist, übernimmt Git die Führung zurück.

Hinweis: Meine aktuelle Version von VSCode ist 0.9.2

Ich hoffe das hilft.

Frank Boucher
quelle
Vielen Dank! Welche Bedeutung hat das -wund wo haben Sie das dokumentiert gefunden?
Gary Ewan Park
1
Guter Punkt. Es kommt von Atom -w ist für Wait. Ich habe meine Antwort bearbeitet.
Frank Boucher
Ich habe dies eingerichtet und bin froh zu sagen, dass es funktioniert. Wenn ich dies jetzt als Visual Studio Code zum Funktionieren bringen könnte, um auch die Dateien zu unterscheiden, wäre das großartig! :-)
Gary Ewan Park
10
Dies scheint nun mit dem neuesten Update auf VS Code nicht mehr zu funktionieren. Hast du eine Idee? Vielen Dank!
Gary Ewan Park
2
@GaryEwanPark: Sie müssen stattdessen code.cmd (oder Code auf * nix) aus dem Unterverzeichnis bin starten , damit die Befehlszeilenoptionen funktionieren. Idealerweise fügen Sie das Unterverzeichnis bin zu Ihrer Umgebungsvariablen% PATH% hinzu (das Installationsprogramm erledigt dies auch für Sie) und konfigurieren den ausgeführten Editor git config --global core.editor "code --wait".
Unsichtbarer
13

Sie müssen den folgenden Befehl verwenden:

git config --global core.editor "'C:\Program Files\Microsoft VS Code\code.exe' -n -w"

Stellen Sie sicher, dass Sie Ihren Editor von Git Bash aus starten können

Wenn Sie Code.exe mit kurzem Pfad verwenden möchten, können Sie dies tun, indem Sie Ihrem .bash_profile die folgende Zeile hinzufügen:

alias vscode="C:/Program\ Files/Microsoft\ VS\ Code/Code.exe"

Und jetzt können Sie es nur mit dem vscodeBefehl (oder wie auch immer Sie es genannt haben) aufrufen.

Einige zusätzliche Informationen:

Setup fügt Ihrem% PATH% Visual Studio-Code hinzu, sodass Sie über die Konsole 'Code' eingeben können, um VS-Code in diesem Ordner zu öffnen. Sie müssen Ihre Konsole nach der Installation neu starten, damit die Änderung der Umgebungsvariablen% PATH% wirksam wird.

IluxaKuk
quelle
1
-nist eine Abkürzung dafür, --new-windowdass git ein neues Editorfenster öffnet, und -weine Abkürzung dafür --wait, dass git darauf wartet, dass Sie das Fenster wieder schließen. Dies ist die einzige Antwort, die für mich funktioniert, da ich, wenn ich VS Code bereits geöffnet habe --wait, ohne nicht funktionieren kann --new-window.
Jan Aagaard
11

Eine weitere nützliche Option ist das Festlegen der EDITORUmgebungsvariablen. Diese Umgebungsvariable wird von vielen Dienstprogrammen verwendet, um zu wissen, welcher Editor verwendet werden soll. Git verwendet es auch, wenn no core.editorgesetzt ist.

Sie können es für die aktuelle Sitzung festlegen, indem Sie:

export EDITOR="code --wait"

Auf diese Weise verwenden nicht nur gitviele andere Anwendungen VS Code als Editor.

Um diese Änderung dauerhaft zu machen, fügen Sie diese beispielsweise zu Ihrer hinzu ~/.profile. Weitere Optionen finden Sie in dieser Frage .


Ein weiterer Vorteil dieses Ansatzes besteht darin, dass Sie verschiedene Editoren für verschiedene Fälle festlegen können:

  1. Wenn Sie vom lokalen Terminal aus arbeiten.
  2. Wenn Sie über eine SSH-Sitzung verbunden sind.

Dies ist besonders bei VS Code (oder einem anderen GUI-Editor) nützlich, da es ohne GUI einfach nicht funktioniert.

Fügen Sie dies unter Linux in Folgendes ein ~/.profile:

# Preferred editor for local and remote sessions
if [[ -n $SSH_CONNECTION ]]; then # SSH mode
  export EDITOR='vim'
else # Local terminal mode
  export EDITOR='code -w'
fi

Auf diese Weise ist bei Verwendung eines lokalen Terminals die $SSH_CONNECTIONUmgebungsvariable leer, sodass der code -wEditor verwendet wird. Wenn Sie jedoch über SSH verbunden sind, ist die $SSH_CONNECTIONUmgebungsvariable eine nicht leere Zeichenfolge, sodass der vimEditor verwendet wird. Es ist ein Konsoleneditor, sodass es auch dann funktioniert, wenn Sie über SSH verbunden sind.

Ruslan Stelmachenko
quelle
2

Ich öffnete meine .gitconfigund änderte sie mit:

[core]
    editor = 'C:/Users/miqid/AppData/Local/Code/app-0.1.0/Code.exe'

Das hat es für mich getan (ich bin unter Windows 8).

Ich habe jedoch festgestellt, dass nach dem Versuch einer beliebigen Anzeige git commitin meiner Git Bash- Konsole die folgende Meldung angezeigt wird:

[9168:0504/160114:INFO:renderer_main.cc(212)] Renderer process started

Unsicher, welche Konsequenzen dies haben könnte.

miqh
quelle
Ich hatte auch versucht, dass ich jedoch "fatal: bad config file line 14 in C: \ Users \ gep13 / .gitconfig" bekam, dann bemerkte ich, dass ich Backslashes hatte, bei denen Sie Schrägstriche vorwärts haben. Das Ändern dieser Runde hat funktioniert, aber wie Sie sehe ich die Ausgabe "Renderer-Prozess gestartet", die für mich tatsächlich zweimal ausgegeben wird und dann Folgendes anzeigt: "[11956: 0504/091108: ERROR: ipc_channel_win.cc (136)] Pipe Fehler: 109 ", aber das Commit scheint tatsächlich funktioniert zu haben.
Gary Ewan Park
Ah, interessant. Es scheint, dass mein Vorschlag nur funktioniert, wenn Sie den Code vor dem Festschreiben vollständig geschlossen haben (nicht sehr praktisch!) . Ich habe den gleichen Fehler festgestellt, den Sie in Ihrem Update gemeldet haben, wenn Code geöffnet ist.
Miqh
in der Tat interessant. Ich denke, hier würde das Flag -multiInst für Notepad ++ ins Spiel kommen. Ich frage mich, ob es für VSCode etwas Ähnliches gibt.
Gary Ewan Park
Nur zu Ihrer Information, app-0.1.0/resources/app/env.jsscheint einige Befehlszeilenflags zu enthalten, die die ausführbare Code-Datei verwendet. Keiner schlägt ein Verhalten vor, das dem von -multiInstjedoch entspricht.
Miqh
Sie müssen das --waitFlag hinzufügen , und das --new-windowFlag wird ebenfalls dringend empfohlen, damit die Festschreibungsnachricht / diff / was auch immer nicht nur als neue Registerkarte in einem bereits geöffneten Editor angezeigt wird, sodass Sie möglicherweise noch geschlossene Dateien schließen müssen Arbeiten Sie daran, um Git zu signalisieren, dass Sie mit der Bearbeitung fertig sind.
Isochronous
1

GitPad legt Ihren aktuellen Texteditor als Standardeditor für Git fest.

Mein Standardeditor für .txtDateien in Windows 10 ist Visual Studio Code. Durch Ausführen von GitPad wurde es einmal zum Standardeditor für Git. Ich habe die in der Frage genannten Probleme nicht erlebt (Git wartet, bis das VS-Code-Fenster in meinem Fall geschlossen wird).

(Der Link für die .exeDatei hat bei mir nicht funktioniert. Möglicherweise müssen Sie die Quelle selbst kompilieren.)

Şafak Gür
quelle
Worauf haben Sie als Standardeditor hingewiesen? Ich habe versucht, das zu verwenden, was hier beschrieben wird: donovanbrown.com/post/2015/07/07/… Aber das scheint nicht funktionieren zu wollen. Ich möchte nicht wirklich auf eine bestimmte Exe zeigen, da sich dies ändert, wenn der Code aktualisiert wird.
Gary Ewan Park
1
@Gary, ich habe nicht eine bestimmte Datei zeigen müssen, Code in der Liste war , als ich tat Right click> Open with> Chose another app. Ich würde erwarten, dass es sich beim Setup selbst registriert (und die Registrierung bei jedem Update aktualisiert, damit die Shell es findet), aber ich konnte nichts anderes als das Kontextmenüelement "Mit Code öffnen" in der Registrierung finden. Ich habe wirklich keine klarere Antwort darauf, sorry.
Şafak Gür
Hmm, das ist komisch, ich habe keinen Code als Eintrag in der Liste, der erscheint, wenn ich das mache.
Gary Ewan Park
1

Gute Nachrichten! Zum Zeitpunkt des Schreibens wurde diese Funktion bereits in der Version 0.10.12-Insider implementiert und über 0.10.14-Insider ausgeführt . Daher werden wir es in der kommenden Version 1.0 von VS Code haben .

Implementierungsreferenz: Implementieren Sie -w / - wait Befehlszeile arg

Wasif Hossain
quelle
Können Sie kommentieren, wie ich den Diff-Viewer in VSCode verwenden könnte, um Diffs in Git anzuzeigen?
Gary Ewan Park
1

Ich möchte diese Schrägstriche nur zu früheren Antworten hinzufügen. Ich verwende Windows 10 CMD und es funktioniert nicht ohne Schrägstriche vor den Leerzeichen.

git config --global core.editor "C:\\Users\\your_user_name\\AppData\\Local\\Programs\\Microsoft\ VS\ Code\\Code.exe"
Victor Ma
quelle
Ich konnte hinzufügen mit: git config --global core.editor "'C: \ Benutzer \ cbre_admin \ AppData \ Local \ Programme \ Microsoft VS Code \ Code.exe' -w"
rjt011000
0

Ich bin mir nicht sicher, ob Sie dies tun können, aber Sie können diese Ergänzungen in Ihrer gitconfig-Datei ausprobieren.

Versuchen Sie, kdiff3 von diesen Werten zu ersetzen, um auf die ausführbare Datei von Visual Studio Code zu verweisen.

[merge] tool = kdiff3 [mergetool "kdiff3"] path = C:/Program Files/KDiff3/kdiff3.exe keepBackup = false trustExitCode = false

SJMan
quelle
Wie ich in meiner Frage erwähnt habe, glaube ich nicht, dass das Zusammenführen unterstützt wird, da ich nicht glaube, dass Visual Studio Code weiß, wie dies zu tun ist. Ich vermute, dass es nur diff und Messaging durchführen kann.
Gary Ewan Park
0

Ich habe Visual Studio Code als Standard zum Öffnen der TXT-Datei eingerichtet. Und als nächstes habe ich einen einfachen Befehl verwendet : git config --global core.editor "'C:\Users\UserName\AppData\Local\Code\app-0.7.10\Code.exe\'". Und alles funktioniert ziemlich gut.

Zidu
quelle
0

Führen Sie diesen Befehl in Ihrer Mac Terminal-App aus

git config --global core.editor "/Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code"
Mohammed
quelle
2
Dies funktioniert nicht ganz, da die Fehlermeldung angezeigt wird: Abbrechen des Commits aufgrund einer leeren Commit-Nachricht. Ein Warteflag muss hinzugefügt werden. Zum Beispiel --warten.
Belfield
0

Unter Windows 10 mit der 64-Bit-Insider-Edition sollte der Befehl lauten:

git config --global core.editor "'C: \ Programme \ Microsoft VS Code Insider \ bin \ code-insiders.cmd'"

Sie können die Datei 'code-insiders.cmd' auch im Verzeichnis 'Programme' in 'code.cmd' umbenennen. Auf diese Weise können Sie jetzt den Befehl 'code' verwenden. um die Bearbeitung der Dateien auf dem zu starten. Verzeichnis

LuisCarlos Rodriguez
quelle