git difftool, откройте все файлы diff немедленно, а не последовательно
поведение git diff по умолчанию заключается в том, чтобы открыть каждый файл diff в последовательном режиме (дождитесь закрытия предыдущего файла перед открытием следующего файла).
Я ищу способ открыть все файлы сразу - в BeyondCompare например, это откроет все файлы на вкладках в том же окне BC.
это облегчило бы просмотр сложного набора изменений; пролистывать назад и вперед между файлами diff и игнорировать неважные файлы.
12 ответов:
начиная с
gitv1.7. 11, вы можете использоватьgit difftool --dir-diffдля выполнения каталога diff.следующий ответ относится к
gitустановки старее, чем v1.7.11.
этот же вопрос был задан на git mail list.
я собрал сценарий оболочки, основанный на этом потоке электронной почты, который выполняет разницу в каталоге между произвольными коммитами.
начиная с git v1.7. 10,
git-diffallскрипт включен вcontribстандартной установки git.для версий до v1.7. 10, вы можете установить от
git-diffallна GitHub.описание проекта:
скрипт git-diffall предоставляет механизм сравнения на основе каталогов мерзавец. Скрипт опирается на разница.опция настройки инструмента для определить, какие использованы средства просмотра различий.
этот скрипт совместим со всеми формы, используемые для указания диапазона изменения в diff:
1)
git diffall: показывает разницу между рабочее дерево и поэтапные изменения
2)git diffall --cached [<commit>]: показывает разница между поэтапными изменениями иHEAD(или другой именованный commit)
3)git diffall <commit>: показывает разницу между рабочее дерево и имя commit
4)git diffall <commit> <commit>: показать дифф между двумя названными коммитами
5)git diffall <commit>..<commit>: аналогично выше
Шесть)git diffall <commit>...<commit>: показать изменения на ветке, содержащей и до во-вторых, начиная с общего предок обоих<commit>Примечание: все формы принимают необязательный путь ограничитель
[--] [<path>]этот скрипт основан на пример предоставлено Томасом Растом на Git список.
вот на чем я остановился...
скопируйте следующий код в файл с именем
git-diffall(без расширения):#!/bin/sh git diff --name-only "$@" | while read filename; do git difftool "$@" --no-prompt "$filename" & doneпоместите файл в
cmdпапка вашего git install dir (напримерC:\Program Files (x86)\Git\cmd)и использовать, как вы бы
git diff:git diffall git diffall HEAD git diffall --cached git diffall rev1..rev2 etc...Примечания: ключ к нему является & param, который сообщает внешней команде diff для запуска в фоновой задаче, поэтому файлы обрабатываются немедленно. В случае BeyondCompare это открывает один экран с каждым файлом в своей собственной вкладке.
meldимеет аккуратную функцию, что если вы даете ему каталог под управлением исходного кода (Git, Mercurial, Subversion, Bazaar и, вероятно, другие) он будет автоматически перечислять все измененные файлы, и вы можете дважды щелкнуть, чтобы просмотреть индивидуальные различия.ИМО это гораздо проще ввести
meld .и пусть он выяснит VCS, чем настроить VCS для запускаmeld. Кроме того, вы можете использовать одну и ту же команду независимо от того, какие VCS использует ваш проект, который это здорово, если вы переключаетесь между ними много.единственным недостатком является то, что для meld медленнее сканировать изменения, чем передавать изменения из git/hg / svn, хотя достаточно ли это медленно, чтобы быть проблемой, будет зависеть от того, как вы его используете, я уверен.
Я нашел этот метод (GitDiff.летучая мышь и Гитдифф.rb), который копирует файлы в Старые/новые временные dirs, а затем сравнивает их с папкой.
но я бы предпочел просматривать рабочие файлы напрямую (из рабочего каталога), так как BeyondCompare имеет удобную функцию редактирования файла из окна diff, что отлично подходит для быстрой очистки.
Edit: a подобный метод здесь в ответ на мой вопрос о рассылке git список.
git meld=> https://github.com/wmanley/git-meld это удивительный скрипт, который откроет аккуратное различие всех файлов в одном окне.
диффузное также имеет интеграцию VCS. Он взаимодействует с множеством других VCS, включая SVN, Mercurial, Bazaar ... Для Git он даже покажет три панели, если некоторые, но не все изменения будут выполнены. В случае конфликтов будет даже четыре панели.
вызвать его с помощью
diffuse -mв вашей рабочей копии Git.
Если вы спросите меня, лучший визуальный отличаются я видел в течение десяти лет. (И я тоже пробовал meld.)
заметил тут это слияние Araxis имеет опцию команды '- nowait':
- nowait предотвращает сравнение от ожидания сравнения будет закрыт
может быть, это возвращает код немедленного выхода и будет работать, кто-нибудь испытал это? Не могу найти аналогичный вариант для BeyondCompare...
Если все, что вы хотите сделать, это открыть все файлы, которые в настоящее время изменены, попробуйте что-то вроде:
vi $(git status | sed -n '/.*modified: */s///p')Если вы делаете фиксации "сложных наборов изменений", вы можете пересмотреть свой рабочий процесс. Одна из действительно приятных особенностей git заключается в том, что он позволяет разработчику легко уменьшить сложные наборы изменений до серии простых патчей. Вместо того, чтобы пытаться редактировать все файлы, которые в настоящее время изменены, вы можете посмотреть в
git add --patchчто позволит вам выборочно ставить куски.
Я написал сценарий powershell, который будет дублировать два рабочих дерева и сравнивать с DiffMerge. Так что вы можете сделать:
GitNdiff master~3 .чтобы сравнить главную ветвь три проверки назад с текущим рабочим деревом, например.
его блестящий и новый и, вероятно, полный ошибок. Одним из недостатков является то, что файлы в вашем рабочем дереве, которые еще не были добавлены, копируются в оба рабочих дерева. Это также может быть медленный.
для тех, кто заинтересован в использовании git-diffall на Mac OS X с Araxis, я разветвил проект git-diffall на github и добавил AppleScript, который обертывает команду слияния Araxis. Примечание: это слегка измененный клон
araxisgitdiffфайл, который поставляется с Araxis Merge для Mac OS X.
следующие работы с meld и kdiff3
git difftool --dir-diff origin/branch1..origin/branch2открывает все файлы в окне, которое вы можете просматривать с легкостью. Может использоваться с наборами изменений в месте происхождения/ветка
например:
git difftool --dir-diff origin/master..24604fb72f7e16ed44115fbd88b447779cc74bb1
можно использовать gitk и видим все различия, в то же время

Comments