Як використовувати код Visual Studio як редактор за замовчуванням для Git MergeTool


121

Сьогодні я намагався використати 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 Code, який допомагає вам впоратися з конфліктом злиття! (Переконайтеся, що ви збережете файл перед закриттям Visual Studio Code.)

Прийняти будь-кого змінити?

Для подальшого читання щодо запуску codeз командного рядка дивіться у цій документації .

Для отримання додаткової інформації git mergetoolознайомтеся з цією документацією .


3
Є рядок над <<<< заголовком, який вставляється з переліком параметрів: "Прийняти поточну зміну | прийняти вхідні зміни | прийняти обидві зміни | порівняти зміни", і я вважаю, що вона вставляє це у кожен розділ виявлених змін у файлі. . Але в межах розділу, якщо ви хочете скопіювати трохи цього і трохи цього вручну, я вважаю, що ви внесете цю зміну у свій локальний, а потім перейдіть за допомогою параметра "Прийняти поточну зміну". Тож робочий потік має щось зробити, якщо ви зробите крок назад, щоб зробити крок вперед. Якщо інші вирішать це по-іншому, будь ласка, опублікуйте тут, щоб нас навчати
Ерік Д. Джонсон

3
Я отримую помилку unknown tool: vscode... Я майже впевнений, щоб зателефонувати на VsCode з командного рядка, який ви повинні використовувати codeзамістьvscode
Колоб Каньйон

19
Також для мене це не працює. Це просто спливає VsCode, і жодні файли ніколи не виховуються
Колоб Каньйон

1
Що я хотів би зробити - це "giff difftool mybranch master" і відкрити VS-код з diff всіх файлів, які змінилися. Зараз він відкриє лише один і чекає, коли ви його закриєте.
Плук

1
О, я це знаю, але я не маю гнучкості, яку я шукаю, як отримати різницю між двома комітами або двома гілками. І якщо це так, навігація по git в коді є досить жахливою на мою думку. Мені просто подобається їх розбіжність та злиття інтерфейсу користувача. Я збирався і побачив git difftool -dкаталог для розл. Я завтра перевіру, як це працює.
Плук

23

Мені довелося замінити подвійні лапки простими цитатами:

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

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

Це потрібно, якщо ви використовуєте Git Bash для Windows замість командного рядка Windows.


1
Не для мене. Я щойно робив це в Windows за допомогою командного рядка. Можливо, ви використовуєте щось інше? Якщо це так, я пропоную додати, яке середовище ви використовуєте, щоб інші з тим самим оточенням знали, що їм потрібно внести цю зміну.
Тодесенгель

1
@ e4rache та @ Iztok-Delfin, що ви перерахували тут, є корисним вмістом, але ви випадково зробили це відповіддю, коли це дійсно коментар. Я впевнений, що ви зіткнулися з проблемою, оскільки у вас не було 50 балів на SO, щоб ви могли коментувати, що є певною проблемою потоку роботи на сайті, яку, можливо, слід вивчити. У будь-якому випадку, дякую за внесок, і я додав вашу пораду у своїй відповіді вище. Дякуємо за допомогу тим, хто прийшов пізніше та використовує Git Bash:^)
Ерік Д. Джонсон

@ eric-d-johnson Я цілком мав намір зробити коментар замість відповіді. (вибачте, я новачок на цьому сайті) і btw я використовував bash на Linux. Чи є спосіб перетворити цю відповідь на коментар?
e4rache

@ e4rache Я не знаю, як зробити коментар, але, можливо, модератор це побачить і дасть нам кілька порад (підказки, підказки). Якщо у вас було 50 очок, ви можете прокоментувати прийняту відповідь та видалити цю, тож як тільки ви станете ТАК рок-зіркою з тоннами очок, ви можете повернутися сюди і робити все, що по господарству робить вас щасливим і повертає назад гарні спогади про те, як все починалося.
Ерік Д. Джонсон

1
@mohamedghonemi Хороший відгук. Я оновив пояснення вгорі для macOS та Linux зараз, щоб пам’ятати про використання одиничних лапок '.
Ерік Д. Джонсон

2

У випадку, якщо хтось хоче вирішити це в Visual Studio, іншим варіантом буде це зробити через Visual Studio: Team Explorer -> натисніть на значок Домашня сторінка => Кнопка налаштувань => розгорнути розділ Git => натисніть на глобальні налаштування

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


Visual Studio не еквівалентний коду Visual Studio. Спосіб, як це зроблено, зовсім інший. Див stackoverflow.com/a/33798601 для відмінностей
jwd630

1
@ jwd630 Я знаю, що код VS відрізняється від VS. У мене виникла ця проблема в VS, але не вдалося знайти рішення для цього, тому я хоч краще було б опублікувати її на випадок, якщо хтось вивчить цю проблему. Не потрібно голосувати.
Даніель Б

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                                                    

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" 

Подібне питання тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.