Как просмотреть вывод 'git diff' с помощью моего предпочтительного инструмента сравнения / средства просмотра? - PullRequest
722 голосов
/ 01 ноября 2008

Когда я набираю git diff, я хочу просмотреть вывод с помощью моего выбранного инструмента визуального сравнения (SourceGear "diffmerge" в Windows). Как мне настроить git для этого?

Ответы [ 26 ]

7 голосов
/ 03 февраля 2012

у меня это работает на windows 7. Нет необходимости в промежуточных скриптах sh

содержимое .gitconfig:

    [diff]
      tool = kdiff3

    [difftool]
       prompt = false

    [difftool "kdiff3"]
      path = C:/Program Files (x86)/KDiff3/kdiff3.exe
      cmd = "$LOCAL" "$REMOTE"
7 голосов
/ 04 ноября 2014

Краткое резюме вышеупомянутых великих ответов:

git difftool --tool-help
git config --global diff.tool <chosen tool>
git config --global --add difftool.prompt false

Затем используйте его, набрав (дополнительно указав также имя файла):

git difftool
6 голосов
/ 04 сентября 2011

Если у вас Mac и у вас XCode, значит, у вас установлен FileMerge. Терминальная команда opendiff, так что вы можете просто сделать git difftool -t opendiff

6 голосов
/ 25 декабря 2008

Введение

Для справки я бы хотел добавить свой вариант ответа VonC. Имейте в виду, что я использую версию Gys для MSys (в настоящее время 1.6.0.2) с измененным PATH и запускаю сам Git из Powershell (или cmd.exe), а не из оболочки Bash.

Я ввел новую команду, gitdiff. Выполнение этой команды временно перенаправляет git diff на использование программы визуального сравнения по вашему выбору (в отличие от решения VonC, которое делает это постоянно). Это позволяет мне иметь как функциональность Git diff по умолчанию (git diff), так и функциональность визуального различия (gitdiff). Обе команды принимают одинаковые параметры, поэтому, например, для визуального изменения изменений в конкретном файле вы можете набрать

gitdiff path/file.txt

Настройка

Обратите внимание, что $GitInstall используется в качестве заполнителя для каталога, в котором установлен Git.

  1. Создать новый файл, $GitInstall\cmd\gitdiff.cmd

    @echo off
    setlocal
    for /F "delims=" %%I in ("%~dp0..") do @set path=%%~fI\bin;%%~fI\mingw\bin;%PATH%
    if "%HOME%"=="" @set HOME=%USERPROFILE%
    set GIT_EXTERNAL_DIFF=git-diff-visual.cmd
    set GIT_PAGER=cat
    git diff %*
    endlocal
    
  2. Создать новый файл $GitInstall\bin\git-diff-visual.cmd (заменив [visual_diff_exe] заполнителем на полный путь к выбранной вами программе diff)

    @echo off
    rem diff is called by git with 7 parameters:
    rem path old-file old-hex old-mode new-file new-hex new-mode
    echo Diffing "%5"
    "[visual_diff_exe]" "%2" "%5"
    exit 0
    
  3. Теперь все готово. Запуск gitdiff из репозитория Git теперь должен вызывать вашу программу визуального сравнения для каждого файла, который был изменен.

6 голосов
/ 09 апреля 2009

Вот пакетный файл, который работает для Windows - предполагается, что DiffMerge установлен в папке по умолчанию, обрабатывает x64, обрабатывает замену с обратным слешем по мере необходимости и имеет возможность установить себя. Должно быть легко заменить DiffMerge вашей любимой программой сравнения.

Для установки:

gitvdiff --install 

gitvdiff.bat:

@echo off

REM ---- Install? ----
REM To install, run gitvdiff --install

if %1==--install goto install



REM ---- Find DiffMerge ----

if DEFINED ProgramFiles^(x86^) (
    Set DIFF="%ProgramFiles(x86)%\SourceGear\DiffMerge\DiffMerge.exe"
) else (
    Set DIFF="%ProgramFiles%\SourceGear\DiffMerge\DiffMerge.exe"
)



REM ---- Switch forward slashes to back slashes ----

set oldW=%2
set oldW=%oldW:/=\%
set newW=%5
set newW=%newW:/=\%


REM ---- Launch DiffMerge ----

%DIFF% /title1="Old Version" %oldW% /title2="New Version" %newW%

goto :EOF



REM ---- Install ----
:install
set selfL=%~dpnx0
set selfL=%selfL:\=/%
@echo on
git config --global diff.external %selfL%
@echo off


:EOF
5 голосов
/ 19 сентября 2015

Установить соединение

 # apt-get install meld

Затем выберите это как difftool

 $ git config --global diff.tool meld

Если вы хотите запустить его на консоли типа:

 $ git difftool

Если вы хотите использовать графический режим, введите:

 $ git mergetool

И результат будет:

 'git mergetool' will now attempt to use one of the following tools:
 meld opendiff kdiff3 tkdiff xxdiff tortoisemerge gvimdiff diffuse
 diffmerge ecmerge p4merge araxis bc3 codecompare emerge vimdiff
 Merging:
 www/css/style.css
 www/js/controllers.js

 Normal merge conflict for 'www/css/style.css':
   {local}: modified file
   {remote}: modified file
 Hit return to start merge resolution tool (meld):

Так что просто нажмите enter, чтобы использовать meld (по умолчанию), это откроет графический режим, сохранит магию и нажмите, чтобы разрешить слияние. Это все

5 голосов
/ 22 октября 2009

Для linux-версии о том, как настроить diff в git-версиях до 1.6.3 (1.6.3 добавило difftool в git) это - отличный краткий учебник,

вкратце:

Шаг 1: добавьте это к вашему .gitconfig

[diff]
  external = git_diff_wrapper
[pager]
  diff =

Шаг 2: создайте файл с именем git_diff_wrapper, поместите его где-нибудь в $ PATH

#!/bin/sh

vimdiff "$2" "$5"
4 голосов
/ 09 мая 2016

В Mac OS X,

git difftool -t diffuse 

выполняет работу за меня в папке git. Для установки diffuse можно использовать порт -

sudo port install diffuse
3 голосов
/ 06 декабря 2013

вы можете использовать git difftool.

например, если у вас meld , вы можете редактировать ветви master и devel следующим образом:

git config --global diff.external meld
git difftool master..devel
2 голосов
/ 05 декабря 2013

Я попробовал модные вещи здесь (с tkdiff), и у меня ничего не получалось. Поэтому я написал следующий скрипт, tkgitdiff. Он делает то, что мне нужно.

$ cat tkgitdiff
#!/bin/sh

#
# tkdiff for git.
# Gives you the diff between HEAD and the current state of your file.
#

newfile=$1
git diff HEAD -- $newfile > /tmp/patch.dat
cp $newfile /tmp
savedPWD=$PWD
cd /tmp
patch -R $newfile < patch.dat
cd $savedPWD
tkdiff /tmp/$newfile $newfile
...