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


122

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

Ответы:


129

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

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

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

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

git log --pretty = формат: - только для имени --diff-filter = A | сортировать -у

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

В git v2.21, git ls-filesпоказывает все в текущем каталоге и ниже. Он просто не показывает файлы, которые были удалены в репо.
— Адриан

0

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


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

-2

Скриншот

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


Пожалуйста, подумайте над тем, чтобы лучше сделать снимок экрана, чтобы вам не приходилось подвергать цензуре слишком много.
— Турбьёрн Равн Андерсен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.