Git - список всех файлов, находящихся в настоящее время под контролем исходного кода?

122

Есть ли способ перечислить все файлы, которые в настоящее время находятся под контролем исходного кода в git? (Не только те, которые были изменены).

анонимное
источник

Ответы:

129

Если вы хотите перечислить все файлы для определенной ветви, например master:

git ls-tree -r master - только для имени

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

Если вы хотите получить список всех файлов, которые когда-либо существовали, смотрите здесь :

git log --pretty = формат: - только для имени --diff-filter = A | сортировать -у
slhck
источник
1
Спасибо, slhck, именно то, что я хотел - и полезно знать о втором тоже. Будет отмечен как правильный через 5 с половиной минут, когда мне позволят. :-)
Аноним
3
Спасибо за ответ. Я искал это. Обратите внимание, что git ls-tree -r master --name-onlyбудет делать то же самое, что и первый вариант, без необходимости cut. Ах, и вы можете указать HEADвместо того master, хотите ли вы этот список для какой-либо ветви, в которой вы сейчас находитесь.
Мориц
6
Запуск "git ls-files" сэкономит вам несколько символов :)
Zain R
Почему вырезали с учетом концовки -? Это приводит к тому, что некоторые дополнительные строки показывают несколько файлов во втором столбце, которые повторяются с первого.
Адриан
@ Адриан Понятия не имею, тогда копировали, исправили.
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-репо для 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

Если вы хотите, чтобы пути были указаны относительно вашего текущего (shell) каталога, это сделает работу:

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

и в приведенном выше примере он будет печатать

README
../../../etc/ssh/sshd_config
AndiDog
источник
В git v2.21, git ls-filesпоказывает все в текущем каталоге и ниже. Он просто не показывает файлы, которые были удалены в репо.
Адриан
0

Вы также можете использовать gitkинтерактивный просмотрщик хранилища.

JPaget
источник
1
Это упоминает инструмент, но на самом деле не отвечает «как». Можете ли вы расширить это в практическое решение? Просто указание кому-то в направлении исследования для разработки собственного решения более уместно в качестве комментария. Благодарю. Из обзора
fixer1234
-2

Скриншот

Пожалуйста, посмотрите на изображение, справа есть два варианта патча и Tree. Если вы выберите дерево, вы можете просмотреть структуру папок для каждого коммита.

Амарнат М.Б.
источник
Пожалуйста, подумайте над тем, чтобы лучше сделать снимок экрана, чтобы вам не приходилось подвергать цензуре слишком много.
Турбьёрн Равн Андерсен