git ls-файлы для разных веток - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу найти все файлы уценки в базовом каталоге указанной ветви. git ls-files было предложено мне, но в документации не упоминается указание ветки. Я хочу быть в состоянии сделать это без проверки этой ветви. Можно ли это сделать?

Ответы [ 2 ]

3 голосов
/ 06 апреля 2019

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
2 голосов
/ 06 апреля 2019

Если вы используете git ls-tree, вам может понадобиться отфильтровать вывод самостоятельно, чтобы найти то, что вам нужно.

Как уже упоминалось в этой теме назадв 2012 году:

Существует два варианта использования «шаблона», и первое, вероятно, в порядке, но второе действительно вводит в заблуждение.

Когда мы писали эту команду, было два разных семейства "pathspec", и ls-tree принадлежал к семейству "diff", которое не принимало что-либо, кроме "начальный шаблон пути "(другой из семейств" ls-files "и" grep "допускает подстановочные знаки).Задание группового символа для команды в семействе "ls-tree / diff" никогда не поддерживалось.

Если вы измените ls-tree, чтобы использовать его аргументы paths в качестве pathspec, вы нарушите обратную совместимость.

...