Як змусити 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.