Як змусити git показати список файлів, які відслідковуються?


535

Використовуючи командний рядок git, як я можу змусити git показати список файлів, які відслідковуються у сховищі?



2
Я вірю, що так і є. Але не вважати правильним позначати це дублом, коли на це є краща відповідь.
lindhe

5
в паралельній всесвіті не дивно, наскільки подібне це питання , включаючи всі відповіді, але кожен має свій характерний нюх.
Джефф Пукетт

Відповіді:


628

Якщо ви хочете перерахувати всі файли, які зараз відслідковуються під гілкою master, ви можете використовувати цю команду:

git ls-tree -r master --name-only

Якщо ви хочете список файлів, які коли-небудь існували (тобто включаючи видалені файли):

git log --pretty=format: --name-only --diff-filter=A | sort - | sed '/^$/d'

61
Використовуйте git ls-tree -r HEAD - name-only, якщо ви хочете перерахувати файли поточної гілки
Ramast

3
Чому каталоги не перелічені?
Шучжен

13
@NicolasLykkeIversen - gitне версій каталогів безпосередньо. Натомість він зберігає файли та їх шляхи. ls-treeвиведе всі файли з версією. Щоб краще зрозуміти це відмінність, спробуйте створити порожній каталог для git. Порожній каталог ніколи не відображатиметься в поетапних змінах. Єдиний спосіб версії такого порожнього каталогу - це фактична версія файлу під каталогом. Для випадків використання, коли вам потрібен такий порожній каталог заповнювачів заповнення версій, ви можете створити фіктивний файл під каталогом та його версію. Сподіваюся, пояснення зрозуміло.
Tuxdude

2
Просто зауважте, ls-tree masterне відображаються відстежені файли в області постановки.
nn0p

Чи можливо показати лише каталог верхнього рівня, якщо він містить багато підкаталогів і файлів?
Blaszard

191

Файли, якими керує git, показані git ls-files. Перегляньте його сторінку керівництва.


4
Це, здається, показує файли лише в поточному каталозі або нижче.
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 змушує команду виконуватись так, ніби ви знаходитесь у кореневій директорії repo.
  • -rповторюється у підкаталоги. У поєднанні з --full-treeцим ви отримуєте всі віддані, відслідковані файли.
  • --name-only видаляє інформацію про дозвіл SHA / дозволу, коли ви просто хочете шляхи до файлу.
  • HEADвизначає, для якої гілки ви хочете список відстежених, скоєних файлів. Ви можете змінити це на masterбудь-яку іншу назву філії, але HEADце перевірка, яку ви перевірили прямо зараз.

Це метод із прийнятої відповіді на ~ дублікат питання https://stackoverflow.com/a/8533413/4880003 .


Дякую! Це також працює для голих репостів.
hzpc-joostk

5

Можливо, ви хочете кольоровий вихід із цим.

Я використовую цей однокласник для перерахування відстежуваних файлів та каталогів у поточному каталозі поточної гілки:

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.
baltakatei
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.