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

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

5 ответов

Решение

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

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

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

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

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

git ls-files Команда сделает то, что вам нужно.

Источник: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html

git ls-files будет печатать только файлы в текущем рабочем каталоге.

Если, например, у вас есть git-репо для точечных файлов (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

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

Скриншот

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

Другие вопросы по тегам