Git - Список усіх файлів, які зараз перебувають під контролем джерела?


122

Чи є спосіб перелічити всі файли, які зараз перебувають під контролем джерела в git? (Не лише ті, що були змінені).

Відповіді:


129

Якщо ви хочете перерахувати всі файли для певної гілки, наприклад master:

git ls-tree -r master - тільки ім'я

Ця -rопція дозволить повторюватись у підкаталогах та друкувати кожен файл, який зараз знаходиться під контролем версій. Ви також можете вказати HEADзамість того, masterщоб отримати список для будь-якої іншої гілки, в якій ви можете знаходитись.

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

git log --pretty = формат: - onlyname -diff-filter = A | сортувати -у

1
Дякую slhck, саме те, про що я пішов - і корисно знати і про друге. Позначу як правильне через 5 з половиною хвилин, коли мені дозволять. :-)
Анонімний

3
Дякую за відповідь. Я це шукав. Зверніть увагу, що це git ls-tree -r master --name-onlyбуло б так само, як і перший варіант, не потребуючи cut. Так, і ви можете вказати HEADзамість того, masterчи просто ви хочете цей список для будь-якої галузі, на якій ви зараз перебуваєте.
маврит

6
Запуск "git ls-файлів" заощадить вам декілька символів :)
Zain R

Чому вирізали дано закінчення -? Це призводить до того, що деякі додаткові рядки показують деякі файли у другому стовпці, які повторюються з першого.
Адріан

@Adrian Ніякої ідеї, копійовану тоді, виправлено зараз.
slhck

61

git ls-filesКоманда буде робити те , що вам потрібно.

Джерело: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html


4
git ls-filesзамість git ls-tree -r master --name-only, звичайно, простіше.
karatedog

1
Вибачте, але моя редакція була недійсною. У поточному git немає git-ls-filesбінарного. Існує gitдвійковий з ls-filesкомандою. Посилання на документацію за змістом правильне, але технічно для застарілого двійкового файла.
JonnyJD

@JonnyJD, ймовірно, позначено недійсним, оскільки ваша редакція має бути коментарем.
Ascherer

1
@JonnyJD Всі Git людино-сторінки, названі git-commit, git-init, git-ls-filesі т.д. , навіть якщо ці програми на самому ділі підкоманду. Бінарного ніколи не було git-ls-files, швидше за все. Міркування полягає в тому, що він відповідає механізму зовнішнього підкоманди, який дозволяє зареєструвати git fooкоманду, записавши git-fooдвійковий файл.
Радон Росборо

4

git ls-files буде друкувати файли лише в поточному робочому каталозі.

Якщо, наприклад, у вас є git repo для dotfiles ( core.worktree = /), тоді у вас будуть файли поза коренем git, і ця проста команда більше не працюватиме.

Коротше кажучи, це спрацює:

git --git-dir "`git rev-parse --git-dir`" \
    -C "`git config core.worktree || pwd`" \
    ls-files

Приклад:

mkdir ~/dotfiles
cd ~/dotfiles
git config core.worktree /

# Ignore all files by default, else Git will find all files under "/"
echo "*" > .git/info/exclude

# Add files at the git repo's root and somewhere in the work tree
touch README
git add -f README
git add -f /etc/ssh/sshd_config

# `git status` would now print:
# new file:   ../../../etc/ssh/sshd_config
# new file:   README
git status

git commit -m "Initial commit"

# At this point, `git ls-files` prints only:
# README
git ls-files

# But you can print all files inside the work tree. This will print:
# etc/ssh/sshd_config
# home/yourusername/dotfiles/README
git --git-dir "`git rev-parse --git-dir`" -C "`git config core.worktree || pwd`" ls-files

Якщо ви хочете, щоб шляхи вказані відносно поточного каталогу (оболонки), це виконує роботу:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'

і в наведеному вище прикладі вона надрукувала б

README
../../../etc/ssh/sshd_config

У git v2.21, git ls-filesпоказано все в поточному каталозі та нижче. Він просто не відображає файли, видалені в репо.
Адріан

0

Ви також можете використовувати gitkінтерактивний переглядач репозиторіїв.


1
Це згадує інструмент, але насправді не відповідає "як". Чи можете ви розширити це на прийнятне рішення? Просто вказівка ​​когось у дослідницькому напрямку для розробки власного рішення є більш доцільним як коментар. Дякую. з огляду
fixer1234

-2

Знімок екрана

Погляньте на зображення, праворуч - два варіанти патча та дерево. Якщо ви вибрали дерево, ви можете переглянути структуру папок для кожного коміту.


Будь ласка, подумайте про кращу прихильність знімка екрана, щоб не довелося стільки цензуру.
Thorbjørn Ravn Andersen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.