Как использовать Visual Studio Code в качестве редактора по умолчанию для Git MergeTool

122

Сегодня я пытался использовать команду git mergetoolв командной строке Windows и понял, что по умолчанию используется Vim , что неплохо, но я бы предпочел VS Code .

Как я могу использовать Visual Studio Code в качестве графического интерфейса для обработки конфликтов слияния (или даже в качестве инструмента сравнения) для Git?

Эрик Д. Джонсон
источник

Ответы:

240

Начиная с Visual Studio Code 1.13 Better Merge был интегрирован в ядро ​​Visual Studio Code.

Чтобы связать их вместе, нужно изменить ваш, .gitconfigи у вас есть два варианта .

  1. Для того, чтобы сделать это с помощью записи в командной строке, введите каждый из них: (Примечание: заменить "с 'на Windows , Git Bash, MacOS и Linux , как осветляют Iztok Delfin и 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. Для этого вставьте какую-нибудь строку в .gitconfig файл с кодом Visual Studio .

    • Запускаем git config --global core.editor "code --wait"из командной строки.
    • Отсюда вы можете ввести команду git config --global -e. Вам нужно будет вставить код в «Дополнительный блок» ниже.

      [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"
      

Теперь из вашего каталога Git запускается конфликт, git mergetoolи, тада, у вас есть код Visual Studio, помогающий справиться с конфликтом слияния! (Просто не забудьте сохранить файл перед закрытием Visual Studio Code.)

Кто-нибудь принять входящее изменение?

Дополнительную информацию о запуске codeиз командной строки можно найти в этой документации .

Для получения дополнительной информации git mergetoolознакомьтесь с этой документацией .

Эрик Д. Джонсон
источник
3
Есть строка над <<<< Head, которая вставляется со списком опций: «Принять текущее изменение | Принять входящее изменение | Принять оба изменения | Сравнить изменения», и я считаю, что она вставляет это в каждый раздел обнаруженных изменений в файле. , Но в разделе, если вы хотите индивидуально объединить немного этого и немного вручную, я считаю, что вы бы сделали это изменение в своем локальном, а затем выбрали бы вариант «Принять текущее изменение». Таким образом, рабочий процесс заставляет вас сделать шаг назад, чтобы сделать шаг вперед. Если другие решат эту проблему по-другому, напишите здесь, чтобы проинформировать нас
Эрик Д. Джонсон,
3
Я получаю сообщение об ошибке unknown tool: vscode... Я почти уверен, что вызову VsCode из командной строки, которую вы должны использовать codeвместоvscode
Колоб Каньон
19
Кроме того, это не работает для меня. Он просто открывает VsCode, и никакие файлы не открываются
Каньон Колоб
1
Я бы хотел сделать "giff difftool mybranch master" и открыть VS-код со всеми измененными файлами. Прямо сейчас он откроет только один и будет ждать, пока вы его закроете.
Pluc
1
О да, я знаю это, но у него нет той гибкости, которую я ищу, например, различие между двумя коммитами или двумя ветвями. И если это так, навигация git в коде vs, на мой взгляд, довольно ужасна. Мне просто нравится их интерфейс сравнения и слияния. Я шел и видел git difftool -dкаталог diff. Я завтра проверю, как это работает.
Pluc
23

Мне пришлось заменить двойные кавычки простыми:

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

для правильной работы (в двойных кавычках $ LOCAL и $ REMOTE заменяются их значениями).

Это необходимо, если вы используете Git Bash для Windows вместо командной строки Windows.

e4rache
источник
1
Не для меня. Я только что сделал это в Windows с помощью командной строки. Возможно, вы используете что-то другое? Если это так, я предлагаю добавить, какую среду вы используете, чтобы другие с той же средой знали, что им нужно будет внести это изменение.
Todesengel
1
@ e4rache и @ Iztok-Delfin то, что вы здесь перечислили, является полезным контентом, но вы случайно дали ему ответ, хотя на самом деле это комментарий. Я уверен, что у вас возникли проблемы, потому что у вас не было 50 баллов за SO, чтобы вы могли комментировать, что является своего рода проблемой рабочего процесса сайта, которую, возможно, следует изучить. В любом случае, спасибо за участие, и я добавил ваш совет в свой ответ выше. Спасибо за помощь тем, кто приходит позже и использует Git Bash:^)
Эрик Д. Джонсон
@ eric-d-johnson Я полностью хотел сделать комментарий вместо ответа. (извините, я новичок на этом сайте) и, кстати, я использовал bash на Linux. Есть ли способ превратить этот ответ в комментарий?
e4rache 04
@ e4rache Я не знаю, как оставить комментарий, но, возможно, модератор увидит это и даст нам несколько советов (подсказка, подсказка). Если бы у вас было 50 баллов, вы могли бы прокомментировать принятый ответ и удалить этот, так что, как только вы станете ТАКОЙ рок-звездой с кучей баллов, вы можете вернуться сюда и заняться тем хозяйством, которое сделает вас счастливым и принесет обратно хорошие воспоминания о том, как все начиналось.
Эрик Д. Джонсон
1
@mohamedghonemi Хороший отзыв. Я обновил объяснение вверху для macOS и Linux, чтобы не забыть использовать одинарные кавычки '.
Эрик Д. Джонсон,
2

В случае, если кто-то хочет решить это в Visual Studio, другой вариант будет делать это через Visual Studio: Team Explorer -> щелкните значок Home => кнопку настроек => разверните раздел Git => нажмите Global Settings

введите описание изображения здесь введите описание изображения здесь введите описание изображения здесь

Дэниел Б
источник
Visual Studio не эквивалентен Visual Studio Code. Такие настройки выполняются совершенно иначе. См. Stackoverflow.com/a/33798601 для различий
jwd630
1
@ jwd630 Я знаю, что код VS отличается от кода VS. У меня была эта проблема в VS, но я не мог найти для нее решения, поэтому я подумал, что было бы лучше опубликовать ее, если кто-то испытывает эту проблему. Нет необходимости голосовать против.
Daniel B
2

Помимо превосходного существующего ответа , вы должны открыть VS Code в новом окне, добавив -nего в командную строку.

Итак, вы git config --global --editвыглядите примерно так.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code -n --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code -n --wait --diff $LOCAL $REMOTE                                                    
MVD
источник
1

Используя руководство, вы можете найти интересный аргумент:

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.

Имея эту информацию, вы можете легко использовать следующую команду, не затрагивая конфигурацию git:

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

Аналогичный вопрос здесь

Gomino
источник