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

67538
Anonymous

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

93

4 ответа на вопрос

100
slhck

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

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

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

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

git log --pretty = формат: --name-status | вырезать -f2- | сортировать -у 
Спасибо, slhck, именно то, что я хотел - и полезно знать о втором тоже. Будет отмечен как правильный через 5 с половиной минут, когда мне позволят. :-) Anonymous 11 лет назад 1
Спасибо за ответ. Я искал это. Обратите внимание, что `git ls-tree -r master --name-only` будет делать то же самое, что и первый вариант, без необходимости в` cut`. Ах, и вы можете указать `HEAD` вместо` master`, если вы просто хотите этот список для любой ветви, в которой вы сейчас находитесь. maurits 11 лет назад 3
Запуск "git ls-files" сэкономит вам несколько символов :) Zain R 8 лет назад 4
50
Mihai Capotă

The git ls-files command will do what you need.

Source: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html

`git ls-files` вместо` git ls-tree -r master --name-only` определенно проще. karatedog 10 лет назад 3
Извините, но мои правки не были недействительными. В текущем git нет двоичного файла git-ls-files. Существует двоичный файл `git` с командой` ls-files`. Ссылка на документацию верна по содержанию, но технически для устаревшего двоичного файла. JonnyJD 10 лет назад 1
@JonnyJD, вероятно, помечен как недействительный, потому что ваша правка должна быть комментарием. Ascherer 9 лет назад 0
@JonnyJD Все man-страницы Git называются «git-commit», «git-init», «git-ls-files» и т. Д., Даже если программы на самом деле являются подкомандами. Скорее всего, никогда не было бинарника `git-ls-files`. Причина заключается в том, что это согласуется с механизмом внешней подкоманды, который позволяет вам зарегистрировать команду `git foo`, написав двоичный файл` git-foo`. Radon Rosborough 6 лет назад 1
3
AndiDog

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 
0
JPaget

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

Это упоминает инструмент, но на самом деле не отвечает «как». Можете ли вы расширить это в практическое решение? Просто указание кому-либо в направлении исследования для разработки собственного решения более уместно в качестве комментария. Благодарю. [из обзора] (https://superuser.com/review/low-quality-posts/737832) fixer1234 6 лет назад 1

Похожие вопросы