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, вы нарушите обратную совместимость.