Используя командную строку git, как мне сделать так, чтобы git показывал список файлов, которые отслеживаются в хранилище?
Используя командную строку git, как мне сделать так, чтобы git показывал список файлов, которые отслеживаются в хранилище?
Ответы:
Если вы хотите перечислить все файлы, которые в настоящее время отслеживаются в ветви master, вы можете использовать эту команду:
git ls-tree -r master --name-only
Если вы хотите список файлов, которые когда-либо существовали (например, включая удаленные файлы):
git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'
gitне создает версии каталогов напрямую. Вместо этого он хранит файлы и их пути. ls-treeвыведет все версионные файлы. Чтобы лучше понять это различие, попробуйте установить пустой каталог в git. Пустой каталог никогда не будет отображаться в поэтапных изменениях. Единственный способ создать версию такого пустого каталога - это на самом деле создать файл в этом каталоге. Для случаев использования, когда вам нужен такой пустой каталог-заполнитель в управлении версиями, вы можете создать фиктивный файл в каталоге и версию. Я надеюсь, что объяснение понятно.
ls-tree masterне отображаются отслеживаемые файлы в области подготовки.
Файлы, которыми управляет git, показаны как git ls-files. Проверьте его страницу руководства.
ls... илиls -R
git ls-tree- это относительно pwd.
Принятый ответ показывает только файлы в дереве текущего каталога. Чтобы показать все отслеженные файлы, которые были зафиксированы (в текущей ветви), используйте
git ls-tree --full-tree --name-only -r HEAD
--full-tree заставляет команду работать так, как если бы вы находились в корневом каталоге хранилища.-rвозвращается в подкаталоги. В сочетании с --full-treeэтим вы получаете все зафиксированные и отслеживаемые файлы.--name-only удаляет SHA / информацию о разрешениях, когда вам просто нужны пути к файлам.HEADуказывает, для какой ветви вы хотите получить список отслеживаемых, зафиксированных файлов. Вы можете изменить это masterили любое другое имя ветки, но HEADэто фиксация, которую вы извлекли прямо сейчас.Это метод из принятого ответа на дубликат вопроса https://stackoverflow.com/a/8533413/4880003 .
Вы могли бы хотеть цветной вывод с этим.
Я использую этот однострочный список для отслеживания отслеживаемых файлов и каталогов в текущем каталоге текущей ветви:
ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)
Вы можете добавить его как псевдоним:
alias gl='ls --group-directories-first --color=auto -d $(git ls-tree $(git branch | grep \* | cut -d " " -f2) --name-only)'
Если вы хотите рекурсивно перечислить файлы:
'ls' --color=auto -d $(git ls-tree -rt $(git branch | grep \* | cut -d " " -f2) --name-only)
И псевдоним:
alias glr="'ls' --color=auto -d \$(git ls-tree -rt \$(git branch | grep \\* | cut -d \" \" -f2) --name-only)"
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.