git ls-files
проверяет файлы в index или work-tree (или в обоих).Поскольку текущий индекс и содержимое рабочего дерева обычно отражают текущий коммит, извлеченный из кончика текущей ветви, он не будет работать таким образом.Но есть обходной путь.
Как отмечает VonC , git ls-tree
проверяет дерево объект, такой как тот, что хранится в коммите.Тем не менее, git ls-tree
не принимает аргументы pathspec, такие как **/*.md
.
Обходной путь - считывать интересующий коммит в временный индекс.Чтобы сделать это чисто, используйте mktemp
для создания временного файла, затем удалите временный файл и используйте git read-tree
, чтобы воссоздать файл в качестве действительного временного индекса, содержащего изображение коммита, который вы хотите проверить, который вы можетезатем проверьте с помощью git ls-files
.Например:
$ cd git
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree e83c5163316f89bfbde7d9ab23ca2e25604af290; git ls-files -- "*.h" "**/*.h"; rm $GIT_INDEX_FILE'
cache.h
$ sh -c 'export GIT_INDEX_FILE=$(mktemp); rm $GIT_INDEX_FILE; git read-tree origin/master; git ls-files -- "*.md"; rm $GIT_INDEX_FILE'
.github/CONTRIBUTING.md
.github/PULL_REQUEST_TEMPLATE.md
README.md
contrib/vscode/README.md