Jak używać Visual Studio Code jako domyślnego edytora dla Git MergeTool

121

Dzisiaj próbowałem użyć w git mergetoolwierszu poleceń systemu Windows i zdałem sobie sprawę, że domyślnie używałem Vima , co jest fajne, ale wolałbym VS Code .

Jak mogę mieć funkcję Visual Studio Code jako mojego GUI do obsługi konfliktów scalania (lub nawet jako narzędzie do porównywania) dla Git?

Eric D. Johnson
źródło

Odpowiedzi:

240

Od wersji Visual Studio Code 1.13 Better Merge zostało zintegrowane z rdzeniem Visual Studio Code.

Sposobem na połączenie ich razem jest zmodyfikowanie swojego .gitconfigi masz dwie opcje .

  1. Aby to zrobić z wpisami wierszu polecenia wprowadź każdy z nich: (Uwaga: zastąpić "z 'Windows Git Bash, MacOS i Linux oraz wyjaśniona Iztok Delfin i 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. Aby to zrobić, wklejając jakiś wiersz w programie .gitconfig Visual Studio Code .

    • Uruchom git config --global core.editor "code --wait"z wiersza poleceń.
    • Stąd możesz wprowadzić polecenie git config --global -e. Będziesz chciał wkleić kod w „Dodatkowym bloku” poniżej.

      [user]
          name = EricDJohnson
          email = [email protected]
      [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"
      

Teraz z poziomu katalogu Git z uruchomieniem konfliktu git mergetooli, tada, masz program Visual Studio Code, który pomaga Ci rozwiązać konflikt scalania! (Po prostu pamiętaj, aby zapisać plik przed zamknięciem programu Visual Studio Code).

Czy zaakceptować nadchodzącą zmianę?

Więcej informacji na temat uruchamiania codez wiersza poleceń można znaleźć w tej dokumentacji .

Aby uzyskać więcej informacji na git mergetoolwyjazd tej dokumentacji .

Eric D. Johnson
źródło
3
Nad nagłówkiem <<<< wstawiana jest linia z listą opcji: „Zaakceptuj bieżącą zmianę | Zaakceptuj nadchodzącą zmianę | Zaakceptuj obie zmiany | Porównaj zmiany” i uważam, że wstawia ją w każdej sekcji wykrytych zmian w pliku . Ale w sekcji, jeśli chcesz ręcznie scalić trochę tego i innego ręcznie, uważam, że dokonasz tej zmiany w swoim lokalnym, a następnie wybierzesz opcję „Zaakceptuj bieżącą zmianę”. Tak więc przepływ pracy sprawia, że ​​cofasz się o krok, aby zrobić krok do przodu. Jeśli inni rozwiązują ten problem w inny sposób, napisz tutaj, aby nas pouczyć
Eric D. Johnson,
3
Otrzymuję błąd unknown tool: vscode... Jestem prawie pewien, że wywołam VsCode z wiersza poleceń, którego musisz użyć codezamiastvscode
Kolob Canyon
19
U mnie też to nie działa. Po prostu wyskakuje otwarty VsCode i żadne pliki nie są przenoszone
Kolob Canyon
1
To, co chciałbym zrobić, to „giff difftool mybranch master” i otworzyć kod VS z różnicami wszystkich zmienionych plików. W tej chwili otworzyłby się tylko jeden i czekał, aż go zamkniesz.
Pluc
1
O tak, wiem to, ale nie ma takiej elastyczności, jakiej szukam, jak uzyskanie różnicy między dwoma zatwierdzeniami lub dwoma gałęziami. A jeśli tak, nawigacja po git w vs code jest moim zdaniem dość okropna. Po prostu podoba mi się ich interfejs różnicowania i scalania. Szedłem i zobaczyłem git difftool -dróżnicę w katalogu. Jutro sprawdzę, jak to działa.
Pluc,
23

Musiałem zamienić podwójne cudzysłowy na proste cudzysłowy:

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

aby działał poprawnie (przy podwójnych cudzysłowach $ LOCAL i $ REMOTE są zastępowane ich wartościami).

Jest to potrzebne, jeśli używasz Git Bash dla Windows zamiast wiersza polecenia systemu Windows.

e4rache
źródło
1
Nie dla mnie. Właśnie to zrobiłem w systemie Windows przy użyciu wiersza polecenia. Może używasz czegoś innego? Jeśli tak, sugeruję dodanie używanego środowiska, aby inne osoby z tym samym środowiskiem wiedziały, że będą musiały wprowadzić tę zmianę.
Todesengel
1
@ e4rache i @ Iztok-Delfin to, co tu wymieniłeś, jest pomocną treścią, ale przypadkowo podałeś odpowiedź, kiedy to naprawdę komentarz. Jestem pewien, że wpadłeś w kłopoty, ponieważ nie miałeś 50 punktów w SO, aby umożliwić Ci komentowanie, co jest rodzajem problemu z przepływem pracy w witrynie, który może powinien zostać rozpatrzony. W każdym razie dziękuję za wkład i dodałem twoją wskazówkę do mojej odpowiedzi powyżej. Dzięki za pomoc tym, którzy przyjdą później i używają Git Bash:^)
Eric D. Johnson
@ eric-d-johnson Całkowicie chciałem napisać komentarz zamiast odpowiedzi. (przepraszam, jestem nowy na tej stronie) i przy okazji używałem basha na Linuksie. Czy istnieje sposób przekształcenia tej odpowiedzi w komentarz?
e4rache
@ e4rache Nie wiem, jak to skomentować, ale być może moderator to zobaczy i udzieli nam kilku wskazówek (podpowiedź, podpowiedź). Gdybyś miał 50 punktów, mógłbyś skomentować zaakceptowaną odpowiedź i usunąć tę, więc gdy zostaniesz TAK gwiazdą rocka z mnóstwem punktów, możesz tu wrócić i robić to, co sprzątanie cię uszczęśliwia i przywraca dobre wspomnienia, jak to się wszystko zaczęło.
Eric D. Johnson,
1
@mohamedghonemi Dobra opinia. Zaktualizowałem wyjaśnienie u góry dla macOS i Linuksa, aby pamiętać o używaniu pojedynczych cudzysłowów '.
Eric D. Johnson
2

W przypadku, gdyby ktoś chciał rozwiązać problem w Visual Studio, inna opcja robiłaby to przez Visual Studio: Team Explorer -> kliknij ikonę Home => przycisk Ustawienia => rozwiń sekcję Git => kliknij Ustawienia globalne

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

Daniel B.
źródło
Visual Studio nie jest odpowiednikiem Visual Studio Code. Sposób wykonywania takich ustawień jest zupełnie inny. Różnice można znaleźć na stackoverflow.com/a/33798601
jwd630
1
@ jwd630 Wiem, że kod VS różni się od VS. Miałem ten problem w VS, ale nie mogłem znaleźć rozwiązania, więc pomyślałem, że lepiej byłoby go opublikować na wypadek, gdyby ktoś eksperymentował z tym problemem. Nie ma potrzeby głosowania negatywnego.
Daniel B
2

Oprócz doskonałej istniejącej odpowiedzi , powinieneś otworzyć VS Code w nowym oknie, dodając -ndo wiersza poleceń.

Więc git config --global --editwyglądasz mniej więcej tak.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE                                                    
mvd
źródło
1

Korzystając z instrukcji można znaleźć ciekawy argument:

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.

Dzięki tym informacjom możesz łatwo użyć następującego polecenia bez dotykania konfiguracji git:

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

Podobne pytanie tutaj

Gomino
źródło