git
отслеживает объекты дерева, которые являются его представлением каталогов. Хотя технически это возможно с точки зрения объектной модели, git не хранит пустые деревья. Вместо этого git
удалит любую запись для пустого дерева из его родительского дерева.
Команда git diff-tree
создает вывод, который показывает, как все записи дерева изменились между деревьями.
git diff-tree origin/master master
Это выведет, как изменились все записи в данном дереве (то есть корневое дерево данного коммита в этом примере).
Формат описан в справочной странице git-diff-tree
, но в основном любой каталог, который был создан или удален, будет иметь 040000 во втором или первом столбце и 000000 в первом или втором столбце соответственно. Это «режимы» записи дерева для левой и правой записей.
Если вы хотите просматривать и искать записи дерева в поддеревьях, вы должны использовать опцию -t
, а не только опции -r
, так как по умолчанию -r
показывает вложенные записи дерева вместо записи дерева сам по себе -t
покажет оба.
Если вас интересуют каталоги, которые изменились (добавлены или удалены, или изменены на другой тип или, например, символическую ссылку), а не просто другое содержимое, то вам, вероятно, нужно отфильтровать записи, начинающиеся с :040000 040000
.
Вот возможная командная строка, которая делает это.
git diff-tree -t origin/master master | grep 040000 | grep -v -E '^:040000 040000'