Использование встроенного инструмента слияния Visual Studio 2012 с Git

Итак, я не знаю, заметил ли кто-нибудь, но новый инструмент слияния, упакованный с VS2012, доведен до крайности. Недавно я перешел на Git для управления исходным кодом и очень хочу настроить VS2012 в качестве инструмента difftool/mergetool по умолчанию.

Любые предложения о том, как это сделать? Я бы предпочел, чтобы сравнение/слияние запускалось в активном окне VS2012, а не в новом экземпляре, если это возможно.


person Adam Drewery    schedule 01.10.2012    source источник
comment
Насколько мне известно, инструмент слияния TFS является двусторонним инструментом слияния, что означает, что он будет ожидать слияния только двух файлов. Git нужен инструмент трехстороннего слияния (третий файл является базовым предком двух других файлов). Так что мое текущее лучшее предположение состоит в том, что это невозможно.   -  person Sardaukar    schedule 01.10.2012
comment
возможный дубликат git merge с использованием инструмента сравнения vs2012 Не точный дубликат , но, возможно, стоит объединить вопросы.   -  person R0MANARMY    schedule 01.10.2012
comment
Вы видели последнюю интеграцию VS с Git. Если вы работаете с VS в качестве своей IDE, это должно быть очень удобно для вас. blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/   -  person allen    schedule 31.01.2013
comment
@allen Просто хотел добавить это: blogs.msdn.com/b/bharry/archive/2013/01/30/git-init-vs.aspx . Возможно, добавление этих ссылок в качестве ответа поможет выделить этот хороший вариант.   -  person Grimace of Despair    schedule 01.02.2013
comment
Установил это, и это все, на что я мог надеяться! Отличный ответ. Не могу оценить его, поскольку он добавлен как комментарий, а не ответ.   -  person Adam Drewery    schedule 01.02.2013


Ответы (4)


Если вы используете Git Source Control Provider с Visual Studio, это выглядит как эта функция реализована и доступна с версии 1.0.0.

Или если вы начнете использовать Microsoft инструменты для git, которые также будут использовать встроенный -в diff инструмент. Из некоторых скриншотов, похоже, что это будет двухстороннее слияние с результатом внизу.

person R0MANARMY    schedule 01.10.2012
comment
Да, это трехсторонний инструмент слияния. Способ три в трех относится к сравнению трех компонентов: две стороны ответвления по сравнению с предком. Место, где вывод слияния рисуется в пользовательском интерфейсе, не имеет значения. Но даже если это имело значение, вы можете щелкнуть кнопку с тремя панелями, чтобы результат слияния оказался посередине. - person Edward Thomson; 16.10.2014

В этой статье объясняется, как это сделать. Я попробовал это, и это работает. В моем случае diff открывался в любом существующем экземпляре Visual Studio, что вы и предпочли.

[diff]
    tool = vsdiffmerge
[difftool]
      prompt = false
[difftool "vsdiffmerge"]
      cmd = '"C:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" //t
      keepbackup = false
      trustexitcode = true
[merge]
      tool = vsdiffmerge
[mergetool]
      prompt = false
[mergetool "vsdiffmerge"]
      cmd = '"C:/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE/vsdiffmerge.exe"' "$REMOTE" "$LOCAL" "$BASE" "$MERGED" //m
      keepbackup = false
      trustexitcode = true

Или используйте %VSINSTALLDIR%, чтобы всегда ссылаться на версию Visual Studio, которая соответствует открытой вами командной строке (это работает, только если среда Visual Studio настроена либо с помощью ярлыка командной строки Visual Studio, либо вручную, вызывая vsvars32.bat):

[diff]
    tool = vsdiffmerge
[difftool]
      prompt = false
[difftool "vsdiffmerge"]
      cmd = '"%VSINSTALLDIR%Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" //t
      keepbackup = false
      trustexitcode = true
[merge]
      tool = vsdiffmerge
[mergetool]
      prompt = false
[mergetool "vsdiffmerge"]
      cmd = '"%VSINSTALLDIR%Common7/IDE/vsdiffmerge.exe"' "$LOCAL" "$REMOTE" "$BASE" "$MERGED" //m
      keepbackup = false
      trustexitcode = true
person FarFigNewton    schedule 08.08.2013
comment
вложите свой путь в одинарные кавычки, а затем в двойные кавычки позволит вам сохранить круглые скобки. IE: 'C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsdiffmerge.exe' - person Ken; 26.09.2013
comment
Это лучший ответ на сегодняшний день - единственная проблема в том, что он не работает для меня! Я нажимаю «Возврат» после приглашения, и ничего не происходит... git спрашивает меня, было ли слияние успешным, потому что файл не изменился... - person Adam Drewery; 06.11.2013
comment
Вы также можете использовать %VSINSTALLDIR%, таким образом, из командной строки Visual Studio всегда должна использоваться правильная версия Visual Studio... - person jessehouwing; 07.11.2013
comment
Путь правильный, и я не получаю никаких предупреждений от git, указывающих на обратное, я прочитал что-то, что предполагает, что в vsdiffmerge может быть ошибка при использовании из командной строки. Я попробую с этим глобальным путем и сообщу! - person Adam Drewery; 07.11.2013
comment
Нет-такое же поведение. Никаких вылетов и ошибок, просто не начинается слияние! - person Adam Drewery; 07.11.2013
comment
@jessehouwing Вы говорите, что вам придется использовать git из командной строки Visual Studio, а не bash или CMD? - person FarFigNewton; 07.11.2013
comment
Да, при использовании переменной %VSINSTALLDIR% вам нужно использовать командную строку Visual Studio, или вы можете вызвать vsvars32.bat, чтобы загрузить их в любую другую оболочку. - person jessehouwing; 08.11.2013
comment
@jessehouwing Вы ежедневно используете командную строку Visual Studio? Я открываю его, может быть, раз в два года. - person FarFigNewton; 08.11.2013
comment
Я делаю. Обычно это моя командная строка по умолчанию, поскольку такие инструменты, как snk, msbuild и т. д., по умолчанию находятся в переменных пути, что значительно упрощает жизнь разработчика .NET при выходе из VS. - person jessehouwing; 08.11.2013
comment
@AdamDrewery У меня была такая же проблема, как у тебя. В моем случае оказалось, что у меня была настроена Visual Studio для работы от имени администратора, и я пытался запустить vsdiffmerge из командной строки без повышенных прав. Я предполагаю, что vsdiffmerge запускает devenv, и он молча терпит неудачу, когда пытается подняться до администратора. Если я запускаю его из командной строки администратора, он работает для меня. - person MichaC; 10.04.2014
comment
Меня смущают $LOCAL и $REMOTE$, тем более что их порядок в difftool и mergetool разный. Может ли кто-нибудь просветить меня? - person PhilLab; 17.11.2014
comment
Удивительно, получилось!!! Я пробовал с VS2015, который меняет путь с версии 11.0 на 14.0. - person digaomatias; 15.08.2016
comment
Для Visual Studio 2017 расположение vsdiffmerge.exe находится по адресу - C:\Program Files (x86)\Microsoft Visual Studio\2017\<Edition>\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\vsDiffMerge.exe. - person Rosdi Kasim; 21.06.2017

Решение, помеченное как ответ, не сработало для меня, но это сработало (у меня на пути было местоположение vsdiffmerge.exe - не знаю, имело ли оно к этому какое-либо отношение):

[diff]
    tool = vsdiffmerge
    guitool = vsdiffmerge
[difftool]
    prompt = true
[difftool "vsdiffmerge"]
    cmd = $LOCAL $REMOTE /t
    keepbackup = false
    trustexistcode = true
    path = C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsDiffMerge.exe
[merge]
    tool = vsdiffmerge
[mergetool]
    prompt = false
[mergetool "vsdiffmerge"]
    cmd = $REMOTE $LOCAL $BASE $MERGED /m
    keepbackup = false
    trustexitcode = true
    path = C:/Program Files (x86)/Microsoft Visual Studio 12.0/Common7/IDE/vsDiffMerge.exe
person Küzdi Máté    schedule 07.03.2016

В Visual Studio 2019 вы можете легко сделать это, просто перейдя в Инструменты->Управление исходным кодом->Глобальные настройки Git->Раздел инструментов, а затем используйте Visual Studio для инструмента Diff, инструмента слияния или обоих.

person MelOS    schedule 16.12.2020