Подтвердить что ты не робот

Git diffftool, немедленно распакуйте все файлы diff, а не в серийные

По умолчанию поведение класса git заключается в том, чтобы открыть каждый файл diff в последовательном порядке (до того, как предыдущий файл будет закрыт перед открытием следующего файла).

Я ищу способ открыть все файлы сразу - в BeyondCompare, например, это откроет все файлы на вкладках в одном окне BC.

Это упростит обзор сложного набора изменений; прокручивать назад и переходить между файлами diff и игнорировать неважные файлы.

4b9b3361

Ответ 1

Вот что я решил...

Скопируйте следующий код в файл с именем git-diffall (без расширения):

#!/bin/sh
git diff --name-only "[email protected]" | while read filename; do
    git difftool "[email protected]" --no-prompt "$filename" &
done

Поместите файл в папку cmd вашего каталога git install (например C:\Program Files (x86)\Git\cmd)

И используйте, как вы, git diff:

git diffall
git diffall HEAD
git diffall --cached 
git diffall rev1..rev2
etc...

Примечания. Ключ к нему - это параметр &, который указывает команде внешнего diff выполнить фоновое задание, чтобы файлы обрабатывались немедленно. В случае BeyondCompare открывается один экран с каждым файлом на своей вкладке.

Ответ 2

Начиная с git v1.7.11, вы можете использовать git difftool --dir-diff для выполнения разницы в каталоге.

Следующий ответ относится к установкам git старше, чем v1.7.11.


Этот же вопрос задавался в git списке писем.

Я собрал оболочку script на основе этого потока электронной почты, который выполняет каталог diff между произвольными коммитами.

Начиная с git v1.7.10, git-diffall script включен в contrib стандартной установки git.

Для версий до версии v.1.7.10 вы можете установить из git-diffall проект GitHub.

Вот описание проекта:

git -diffall script предоставляет каталог, основанный на git. script полагается на параметр конфигурации diff.tool для определить, какой интерфейс просмотра используется.

Этот script совместим со всеми формы, используемые для определения диапазона версии для diff:

1) git diffall: показывает разницу между рабочее дерево и поэтапные изменения
  2) git diffall --cached [<commit>]: показывает diff между поэтапными изменениями и HEAD(или другое обозначенное commit)
  3) git diffall <commit>: показывает разницу между рабочее дерево и имя commit |   4) git diffall <commit> <commit>: показать diff между двумя названными коммитами
  5) git diffall <commit>..<commit>: то же, что и выше
  6) git diffall <commit>...<commit>: показать изменения на ветке, содержащей и до во-вторых, начиная с общей предок обоих <commit>

Примечание: все формы имеют необязательный путь ограничитель [--] [<path>]

Этот script основан на примере предоставленный Томасом Растом на Gitсписок.

Ответ 3

meld имеет опрятную функцию, которая дает вам каталог под контролем источника (Git, Mercurial, Subversion, Bazaar и вероятно, другие), он автоматически перечислит все измененные файлы, и вы можете дважды щелкнуть, чтобы просмотреть отдельные отличия.

IMO гораздо проще набрать meld . и выяснить, что VCS, чем настроить VCS на запуск meld. Кроме того, вы можете использовать ту же команду независимо от того, какой VCS использует ваш проект, что отлично, если вы переключаетесь между ними много.

Единственным недостатком является то, что медленнее, чем meld сканировать изменения, чем передавать изменения из git/hg/svn, хотя будет ли он достаточно медленным, чтобы быть проблемой, будет зависеть от того, как вы его используете. я Конечно.

Ответ 4

Я нашел этот метод (GitDiff.bat и GitDiff.rb), который копирует файлы в старые/новые временные директории, а затем папка сравнивается с ними.

Но я предпочел бы просматривать рабочие файлы напрямую (из рабочего каталога), так как у BeyondCompare есть удобная функция, позволяющая редактировать файл из окна diff, что отлично подходит для быстрой очистки.

Изменить: аналогичный метод здесь в ответ на мой вопрос в списке рассылки git.

Ответ 5

git meld = > https://github.com/wmanley/git-meld - это удивительный script, который откроет аккуратный разброс всех файлов в одном окне.

Ответ 6

Отмечено здесь, что Araxis Merge имеет команду "-nowait":

-nowait Предотвращает сравнение с ожиданием закрытия сравнения

Возможно, это вернет код выхода и будет работать, кто-нибудь испытал это? Невозможно найти аналогичный вариант для BeyondCompare...

Ответ 7

Если все, что вы хотите сделать, это открыть все файлы, которые в настоящее время изменены, попробуйте что-то вроде:

vi $(git status | sed -n '/.*modified: */s///p')

Если вы совершаете коммиты "сложных наборов изменений", вам может потребоваться пересмотреть ваш рабочий процесс. Одна из действительно приятных функций git заключается в том, что разработчик упрощает создание сложных наборов изменений в серии простых патчей. Вместо того, чтобы пытаться отредактировать все файлы, которые в настоящее время модифицированы, вам может понадобиться изучить

git add --patch
, который позволит вам выборочно сгруппировать сцены.

Ответ 8

Я написал файл powershell script, который будет дублировать два рабочих дерева и сравнить с DiffMerge. Итак, вы можете сделать:

GitNdiff master~3 .

Чтобы сравнить master-ветку три проверки назад с текущим рабочим деревом, например.

Его блестящие, новые и, вероятно, полные ошибок. Один из недостатков заключается в том, что файлы в рабочем дереве, которые еще не были добавлены, копируются на оба рабочих дерева. Он также может быть медленным.

http://github.com/fschwiet/GitNdiff

Ответ 9

Для тех, кто заинтересован в использовании git -diffall в Mac OS X с Araxis, я разветкил проект git -diffall на github и добавил AppleScript, который обертывает команду Araxis Merge. Примечание: это слегка модифицированный клон файла araxisgitdiff, который поставляется с Araxis Merge для Mac OS X.

https://github.com/sorens/git-diffall

Ответ 10

Diffuse также имеет интеграцию VCS. Он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar,... Для Git он даже покажет три панели, если будут выполнены некоторые, но не все изменения. В случае конфликтов будет даже четыре панели.

Screenshot of diffuse with staged and unstaged edits

Вызвать его с помощью

diffuse -m

в вашей рабочей копии Git.

Если вы спросите меня, лучший визуальный отличит, который я видел в течение десятилетия. (И я тоже попробовал.)

Ответ 11

Вы можете использовать gitk и видеть все различия в одно и то же время