Используйте git ls-tree -r HEAD --name-only, если вы хотите получить список файлов текущей ветки
Ramast
3
Почему каталоги не перечислены?
Shuzheng
13
@NicolasLykkeIversen - gitне создает версии каталогов напрямую. Вместо этого он хранит файлы и их пути. ls-treeвыведет все версионные файлы. Чтобы лучше понять это различие, попробуйте установить пустой каталог в git. Пустой каталог никогда не будет отображаться в поэтапных изменениях. Единственный способ создать версию такого пустого каталога - это на самом деле создать файл в этом каталоге. Для случаев использования, когда вам нужен такой пустой каталог-заполнитель в управлении версиями, вы можете создать фиктивный файл в каталоге и версию. Я надеюсь, что объяснение понятно.
Tuxdude
2
Просто обратите внимание, ls-tree masterне отображаются отслеживаемые файлы в области подготовки.
nn0p
Можно ли показать только каталог верхнего уровня, если он содержит много подкаталогов и файлов?
Блазард
192
Файлы, которыми управляет git, показаны как git ls-files. Проверьте его страницу руководства.
Это, кажется, показывает только файлы в или ниже текущего каталога.
Lyle Z
11
Не возражаете, если я отредактирую это, чтобы включить соответствующие разделы страницы руководства?
Натан Басанезе
1
@NathanBasanese, возможно, вы можете добавить еще один ответ с этой информацией.
Хосе Кастро
@LyleZ Возможно, это должно соответствовать ls... илиls -R
flow2k
1
@LyleZ Кроме того, это поведение то же самое с git ls-tree- это относительно pwd.
flow2k
18
Принятый ответ показывает только файлы в дереве текущего каталога. Чтобы показать все отслеженные файлы, которые были зафиксированы (в текущей ветви), используйте
git ls-tree --full-tree --name-only -r HEAD
--full-tree заставляет команду работать так, как если бы вы находились в корневом каталоге хранилища.
-rвозвращается в подкаталоги. В сочетании с --full-treeэтим вы получаете все зафиксированные и отслеживаемые файлы.
--name-only удаляет SHA / информацию о разрешениях, когда вам просто нужны пути к файлам.
HEADуказывает, для какой ветви вы хотите получить список отслеживаемых, зафиксированных файлов. Вы можете изменить это masterили любое другое имя ветки, но HEADэто фиксация, которую вы извлекли прямо сейчас.
glrПсевдоним вы при условии , что выглядело немного странно , так что я сделал вариант более соответствует формату первого псевдонима вы предоставили: alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'. Проверено git version 2.20.1на Debian 10.
Ответы:
Если вы хотите перечислить все файлы, которые в настоящее время отслеживаются в ветви
master
, вы можете использовать эту команду:Если вы хотите список файлов, которые когда-либо существовали (например, включая удаленные файлы):
источник
git
не создает версии каталогов напрямую. Вместо этого он хранит файлы и их пути.ls-tree
выведет все версионные файлы. Чтобы лучше понять это различие, попробуйте установить пустой каталог вgit
. Пустой каталог никогда не будет отображаться в поэтапных изменениях. Единственный способ создать версию такого пустого каталога - это на самом деле создать файл в этом каталоге. Для случаев использования, когда вам нужен такой пустой каталог-заполнитель в управлении версиями, вы можете создать фиктивный файл в каталоге и версию. Я надеюсь, что объяснение понятно.ls-tree master
не отображаются отслеживаемые файлы в области подготовки.Файлы, которыми управляет git, показаны как
git ls-files
. Проверьте его страницу руководства.источник
ls
... илиls -R
git ls-tree
- это относительноpwd
.Принятый ответ показывает только файлы в дереве текущего каталога. Чтобы показать все отслеженные файлы, которые были зафиксированы (в текущей ветви), используйте
--full-tree
заставляет команду работать так, как если бы вы находились в корневом каталоге хранилища.-r
возвращается в подкаталоги. В сочетании с--full-tree
этим вы получаете все зафиксированные и отслеживаемые файлы.--name-only
удаляет SHA / информацию о разрешениях, когда вам просто нужны пути к файлам.HEAD
указывает, для какой ветви вы хотите получить список отслеживаемых, зафиксированных файлов. Вы можете изменить этоmaster
или любое другое имя ветки, ноHEAD
это фиксация, которую вы извлекли прямо сейчас.Это метод из принятого ответа на дубликат вопроса https://stackoverflow.com/a/8533413/4880003 .
источник
Вы могли бы хотеть цветной вывод с этим.
Я использую этот однострочный список для отслеживания отслеживаемых файлов и каталогов в текущем каталоге текущей ветви:
Вы можете добавить его как псевдоним:
Если вы хотите рекурсивно перечислить файлы:
И псевдоним:
источник
glr
Псевдоним вы при условии , что выглядело немного странно , так что я сделал вариант более соответствует формату первого псевдонима вы предоставили:alias glr='ls --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)'
. Провереноgit version 2.20.1
на Debian 10.