git ls-файлы для разных веток

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

2 ответа

Решение

git ls-files проверяет файлы в индексе или в рабочем дереве (или в обоих). Поскольку текущий индекс и содержимое рабочего дерева обычно отражают текущий коммит, извлеченный из кончика текущей ветви, он не будет работать таким образом. Но есть обходной путь.

Как отмечает 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

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

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

Там есть два использования "шаблона", и первое, вероятно, в порядке, но второе действительно вводит в заблуждение.

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

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

Другие вопросы по тегам