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.