Как мне использовать git diff для определенного каталога?
132
git diffфактически запускает сравнение всего исходного кода. Как мне сделать это в определенном каталоге, чтобы я мог просматривать изменения в файлах под ним?
Я хотел бы использовать git diff -- myfolderдля минимизации двусмысленности git. Общая нотация для git diff (и многих команд git) заключается в том, что для git diff [commit-ish] -- [path]фиксации по умолчанию используется значение HEAD (где вы сейчас находитесь), а по [path]умолчанию - корневой каталог git, но может быть любым, относящимся к вашему текущему каталогу. Без него --git угадает, что вы имеете в виду, [commit-ish]или [path]. В некоторых случаях это приводит к тому, что git называет обозначение «неоднозначным». Если я правильно помню.
L0LN1NJ4
2
Это ничего не выводит, когда я пробую использовать метод в ответе и метод в комментарии.
Ray
@ray, что означает, что у вас нет различий между рабочим деревом и последним коммитом
валерий васильченко
3
Для @ray и будущих людей, видящих это, вы можете включить ветки, между git diff master..develop myfolder/которыми вы пытаетесь различать, как сказал @CrandellWS в комментарии к исходному вопросу. Статус Git покажет вам изменения, если это то, что вы ищете.
BVBAccelerate
2
@ray убедитесь, что вы находитесь в корневом каталоге. Путь будет относительно вашего текущего каталога.
Nickofthyme
59
Если вы сравниваете разные ветки, вам необходимо --отделить ревизию Git от пути файловой системы. Например, с двумя локальными филиалами masterи bryan-working:
После перечисления обеих веток требуется только одно предложение, например: git diff branch1 branch2 - path / to / dir
emery
4
Вы должны иметь привычку смотреть документацию на подобные вещи. Это очень полезно и очень быстро улучшит ваши навыки. Вот соответствующий момент, когда вы делаетеgit help diff
Знак равенства кажется неправильным для git 2.17.1. Используйте git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"вместо этого
Марк Шефер
Обратите внимание, что при использовании Beyond Compare для dir diff вам необходимо либо настроить его для следования символическим ссылкам (в представлении сравнения папок -> Правила (значок рефери) -> Обработка -> следовать символическим ссылкам) ИЛИ добавить --no-symlinksпараметр, чтобы команда читалаgit difftool --dir-diff --no-symlinks
Ашутош Джиндал
1
Вы можете не только добавить путь, но и git diff --relativeполучить результат относительно этой папки.
git -C a/folder diff --relative
А с Git 2.28 (третий квартал 2020 г.) команды семейства " diff" научились diff.relativeучитывать переменную конфигурации " ".
Подписано: Лоран Арну. Подтверждено: oàn Trần Công Danh
diff.relativeЛогический набор опции trueпоказывает изменения только в текущей директории / значении , указанном в pathаргументе relativeопции и шоу имен путей относительно вышеупомянутого каталога.
Учите --no-relativeотменять раньше--relative
Добавьте для документации по параметрам git-format-patch (1) --relativeи--no-relative
git diff master..yourbranch path/to/folder
Ответы:
Укажите путь (в данном случае myfolder) и просто запустите:
источник
git diff -- myfolder
для минимизации двусмысленности git. Общая нотация для git diff (и многих команд git) заключается в том, что дляgit diff [commit-ish] -- [path]
фиксации по умолчанию используется значение HEAD (где вы сейчас находитесь), а по[path]
умолчанию - корневой каталог git, но может быть любым, относящимся к вашему текущему каталогу. Без него--
git угадает, что вы имеете в виду,[commit-ish]
или[path]
. В некоторых случаях это приводит к тому, что git называет обозначение «неоднозначным». Если я правильно помню.git diff master..develop myfolder/
которыми вы пытаетесь различать, как сказал @CrandellWS в комментарии к исходному вопросу. Статус Git покажет вам изменения, если это то, что вы ищете.Если вы сравниваете разные ветки, вам необходимо
--
отделить ревизию Git от пути файловой системы. Например, с двумя локальными филиаламиmaster
иbryan-working
:Или из локального филиала на удаленный:
источник
Вы должны иметь привычку смотреть документацию на подобные вещи. Это очень полезно и очень быстро улучшит ваши навыки. Вот соответствующий момент, когда вы делаете
git help diff
Эти два
<path>
s - это то, что вам нужно изменить в рассматриваемые каталоги.источник
Добавьте Beyond Compare в качестве инструмента сравнения в Git и добавьте псевдоним для diffdir как:
Получите gitdiff как:
Ссылка: Сравните целые каталоги с git difftool + Beyond Compare
источник
git config --global alias.diffdir = "difftool --dir-diff --tool=bc3 --no-prompt"
вместо этого--no-symlinks
параметр, чтобы команда читалаgit difftool --dir-diff --no-symlinks
Вы можете не только добавить путь, но и
git diff --relative
получить результат относительно этой папки.А с Git 2.28 (третий квартал 2020 г.) команды семейства "
diff
" научилисьdiff.relative
учитывать переменную конфигурации " ".См. Коммит c28ded8 (22 мая 2020 г.) Лорана Арно (
spk
) .(Объединено Junio C Hamano -
gitster
- в коммите e34df9a , 02 июня 2020 г.)Документация в настоящее время включает в себя :
источник
Если вы хотите исключить подкаталоги, вы можете использовать
источник
Чтобы использовать Beyond Compare в качестве инструмента для сравнения каталогов, не забудьте включить следующие символические ссылки:
В представлении сравнения папок → Правила (значок рефери):
А затем включите переход по символическим ссылкам и обновите настройки сеанса по умолчанию:
ИЛИ,
настройте псевдоним так:
Обратите внимание, что в любом случае любые изменения, сделанные сбоку (слева или справа), которые относятся к текущему рабочему дереву, сохраняются.
источник