Answers:
如果要列出特定分支的所有文件,例如master
:
git ls-tree -r master-仅名称
该-r
选项将使其递归到子目录并打印当前受版本控制的每个文件。您也可以指定HEAD
而不是master
获取您可能所在的任何其他分支的列表。
如果要获取所有已存在文件的列表,请参见此处:
git log --pretty =格式:--name-only --diff-filter = A | 排序-u
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
仅打印当前工作目录中的文件。
例如,如果您有一个用于dotfiles(core.worktree = /
)的git repo ,那么您将在git root之外拥有文件,该简单命令将不再起作用。
简而言之,这将起作用:
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
交互式存储库查看器。