Ответы:
Если вы хотите перечислить все файлы для определенной ветви, например master
:
git ls-tree -r master - только для имени
-r
Вариант позволит рекурсию подкаталогов и распечатайте каждый файл в настоящее время под контролем версий. Вы также можете указать HEAD
вместо того, master
чтобы получить список для любой другой ветки, в которой вы можете быть.
Если вы хотите получить список всех файлов, которые когда-либо существовали, смотрите здесь :
git log --pretty = формат: - только для имени --diff-filter = A | сортировать -у
git ls-tree -r master --name-only
будет делать то же самое, что и первый вариант, без необходимости cut
. Ах, и вы можете указать HEAD
вместо того master
, хотите ли вы этот список для какой-либо ветви, в которой вы сейчас находитесь.
-
? Это приводит к тому, что некоторые дополнительные строки показывают несколько файлов во втором столбце, которые повторяются с первого.
Команда git ls-files
сделает то, что вам нужно.
Источник: http://www.kernel.org/pub/software/scm/git/docs/git-ls-files.html.
git ls-files
а git ls-tree -r master --name-only
не конечно проще.
git-ls-files
бинарника. Есть git
двоичный файл с ls-files
командой. Ссылка на документацию верна по содержанию, но технически для устаревшего двоичного файла.
git-commit
, git-init
, git-ls-files
и т.д. , даже если эти программы на самом деле Подкоманды. Там никогда не был git-ls-files
бинарным, скорее всего. Причина заключается в том, что это согласуется с механизмом внешней подкоманды, который позволяет вам зарегистрировать git foo
команду, написав git-foo
двоичный файл.
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 ls-files
показывает все в текущем каталоге и ниже. Он просто не показывает файлы, которые были удалены в репо.
Вы также можете использовать gitk
интерактивный просмотрщик хранилища.
Пожалуйста, посмотрите на изображение, справа есть два варианта патча и Tree. Если вы выберите дерево, вы можете просмотреть структуру папок для каждого коммита.