Git diffftool в Windows, чтобы просмотреть список всех измененных файлов в дополнение к diff (a la Kaleidoscope).

Когда я делаю git difftool, Калейдоскоп показывает мне все файлы, которые были изменены в левой боковой панели:


(источник: kaleidoscopeapp.com)

Есть ли в Windows какой-либо инструмент сравнения, который бы показывал мне такой список файлов?

(Я не хочу, чтобы инструмент открывал все файлы одновременно в отдельных окнах. Я ищу одно окно, в котором будет показан список файлов, которые были изменены, и я должен иметь возможность щелкнуть по определенному файлу чтобы увидеть его разницу, как показано на скриншоте Калейдоскопа)

Ответ 1

Вы можете использовать git difftool таким образом, который перечисляет все файлы (рекомендуется git1.8 +):

git difftool --dir-diff

Скопируйте измененные файлы во временное место и выполните разбор каталогов на них.
Этот режим никогда не запрашивает перед запуском инструмента сравнения.

Затем вы можете интегрировать его с помощью BeyondCompare.

Или с помощью WinMerge:

[diff]
    tool = winmerge
[difftool "winmerge"]
    path = C:/Program Files (x86)/WinMerge/winmergeu.exe
    cmd = \"C:/Program Files (x86)/WinMerge/winmergeu.exe\" -r -u \"$LOCAL\" \"$REMOTE\"

Все, что с:

    $ git difftool [<commit> [<commit>]]

Единственная проблема заключается в том, что инструмент git diff в Windows описан в этом сообщении в блоге, nitoyon.

В Unix и MacOS git difftool --dir-diff создайте символическую ссылку на рабочий каталог, если правый файл имеет тот же SHA1, что и файл в рабочем каталоге. Это очень полезно, когда мы модифицируем правые файлы с помощью diffftool.

В Windows вместо создания символических ссылок git difftool --dir-diff копировать правые файлы в рабочий каталог после завершения программы difftool. Я хочу использовать символические ссылки на git для Windows, например Unix и MacOS.

Примечание. В Windows для создания символических ссылок требуется привилегия администратора.

Запустите GitBash в качестве администратора и введите следующую команду.

$ git difftool -d --symlinks [<commit> [<commit>]]

Если вы хотите, создайте псевдоним на .gitconfig.

[alias]
    d = difftool -d --symlinks

Но для этого требуется:

  • для создания команды git mklink:
C:\Program Files (x86)\Git\libexec\git-core\git-mklink:

#!/bin/sh

cmd.exe /c "mklink \"$2\" \"$1\"" > /dev/null
  • для исправления msysgit 1.8.3:
cd /c/Program\ Files\ \(x86\)/Git/libexec/git-core/
$ patch 

With git-difftool.patch:

--- git-difftool Sun Jun 2 11:28:06 2013 +++ git-difftool Tue Jul 9 00:42:02 2013 @@ -283,7 +283,7 @@ exit_cleanup($tmpdir, 1); } if ($symlinks) { - symlink("$workdir/$file", "$rdir/$file") or + !system("git", "mklink", "$workdir/$file", "$rdir/$file") or exit_cleanup($tmpdir, 1); } else { copy("$workdir/$file", "$rdir/$file") or @@ -448,7 +448,7 @@ my $indices_loaded = 0; for my $file (@worktree) { - next if $symlinks && -l "$b/$file"; + next if $symlinks; next if ! -f "$b/$file"; if (!$indices_loaded) {