Как использовать VS Code в качестве инструмента слияния и сравнения в SourceTree?

Этот вопрос и некоторые другие обсуждают как это может работать на Mac, но я не смог найти документацию от Microsoft или Atlassian о том, как сделать это в Windows без попытки сделать это глобальной настройкой Git. (Я просто предпочитаю что-то менять внутри IDE, где это возможно.)

Какие параметры следует использовать с «Пользовательскими» настройками в диалоговом окне «Параметры» SourceTree на вкладке «Различия» для сравнения и слияния с VS-Code?


person HeyHeyJC    schedule 23.04.2018    source источник
comment
Мне не удалось заставить это работать через принятый ответ @HeyHeyJC на моем компьютере с Win 10, на котором работает VS Code V1.32.3. Я добавил свое решение в качестве ответа   -  person Dan Gardner    schedule 27.03.2019
comment
Насколько я вижу, VS Code не выполняет слияния, а только двусторонние различия.   -  person StayOnTarget    schedule 06.03.2020


Ответы (2)


Могут быть и другие лучшие варианты, но после некоторого эксперимента я обнаружил, что эти работают достаточно хорошо...

  • Выберите «Пользовательский» для «Инструмент внешнего сравнения» и «Инструмент слияния».
  • «Команда Diff» в обоих случаях — это путь к тому месту, где установлен VS-Code, например:
    #P2#
  • #P3# <блочная цитата> #P4#
  • #P5# <блочная цитата> #P6#

Флаг '-n' заставляет VS-Code открывать новое окно, что я предпочитаю, поскольку VS-Code открывается очень быстро, но вы можете его опустить. Когда вы имеете дело с конфликтами слияния, вы должны закрыть файл, когда закончите, чтобы продолжить. SourceTree, похоже, не всегда удаляет промежуточные файлы, которые он создает, но вы можете достаточно легко выбрать, щелкнуть правой кнопкой мыши и «Удалить» их из раздела неустановленных файлов.

person HeyHeyJC    schedule 23.04.2018
comment
Путь по умолчанию для VS Code теперь C:\Users\<username>\AppData\Local\Programs\Microsoft VS Code\Code.exe - person Ondrej; 05.02.2019
comment
это настоящий трехсторонний diff, такой как git require, или просто двухсторонний? может поэтому и остался промежуточный файл.. - person Obmerk Kronen; 28.03.2019
comment
@ObmerkKronen Извините, причина, по которой я использую Sourcetree, заключается в том, что я не знаю, что означают такие вещи, как «трехсторонний diff, такой как git require». Я использую его исключительно с репозиториями git, если это поможет? - person HeyHeyJC; 28.03.2019
comment
Понятно . спасибо в любом случае. если вы хотите, вы можете прочитать об этом здесь или здесь например. 3-стороннее слияние — это то, что git использует (или должен использовать). ваш ответ имеет только 2 аргумента, поэтому я предположил, что он двусторонний (третий - это оставшийся файл, который, как вы заявили, sourcetree не знает для обработки. Возможно, добавление аргумента anoteer поможет. - person Obmerk Kronen; 29.03.2019
comment
Спасибо за ответ, у меня он отлично работает. Было бы полезнее, если бы я мог настроить ярлыки для перемещения между конфликтами, в vs-коде, любое предложение сделать это. - person fizmhd; 01.04.2019

Я смог настроить следующие шаги, используя скрипт code.cmd:

  • Настройка «Пользовательский» в качестве внешнего инструмента как для сравнения, так и для слияния
  • Указание на команду code.cmd
    #P2#
  • #P3#
    #P4# #P5# #P6# #P7#

Для меня тогда я смог использовать как diff, так и слияние из Sourcetree.


Примечание. По умолчанию файл code.cmd содержит аргумент командной строки для открытия CLI инструкции "%~dp0..\resources\app\out\cli.js", и каждый раз открывать это было немного утомительно! Я удалил это, поэтому мой файл выглядел следующим образом, и теперь открываются только файлы, отправленные из Sourcetree.

@echo off
setlocal
set VSCODE_DEV=
set ELECTRON_RUN_AS_NODE=1
call "%~dp0..\Code.exe" %*
endlocal
person Dan Gardner    schedule 27.03.2019