Git-列出当前受源代码管理的所有文件?


122

有没有办法在git中列出当前受源代码控制的所有文件?(不仅是那些已被修改的)。

Answers:


129

如果要列出特定分支的所有文件,例如master

git ls-tree -r master-仅名称

-r选项将使其递归到子目录并打印当前受版本控制的每个文件。您也可以指定HEAD而不是master获取您可能所在的任何其他分支的列表。

如果要获取所有已存在文件的列表,请参见此处

git log --pretty =格式:--name-only --diff-filter = A | 排序-u

1
谢谢slhck,这正是我的追求-而且对于了解第二个也是很有用的。如果允许的话,将在5分钟半内标记为正确。:-)
匿名

3
感谢您的回答。我一直在寻找。请注意,该git ls-tree -r master --name-only操作与第一个选项相同,不需要cut。嗯,您可以指定HEAD而不是master是否只希望此列表显示当前所在的分支。
maurits 2012年

6
运行“ git ls-files”将为您节省几个字符:)
Zain R

为什么以结尾结尾-?这会导致一些其他行在第二列中显示某些文件,这些文件是第一列的重复。
阿德里安

@Adrian不知道,那时已粘贴,现在已修复。
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二进制文件。gitls-files命令包含二进制文件。文档的链接内容正确,但从技术上讲,该链接适用于过时的二进制文件。
JonnyJD 2014年

@JonnyJD,可能标记为无效,因为您的编辑应为注释。
Ascherer 2014年

1
@JonnyJD所有Git的人的页面被命名为git-commitgit-initgit-ls-files等即使程序实际上是子命令。从未有过git-ls-files二进制文件,这很有可能。原因是它与外部子命令机制一致,该机制允许您git foo通过编写git-foo二进制文件来注册命令。
Radon Rosborough

4

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 v2.21中,git ls-files显示当前目录及以下目录中的所有目录。它只是不显示已在存储库中删除的文件。
阿德里安

0

您也可以使用gitk交互式存储库查看器。


1
这里提到了一个工具,但是并没有真正回答“如何做”。您可以将其扩展为可行的解决方案吗?只是将某人指向研究方向以使他们开发自己的解决方案更合适。谢谢。 来自审查
fixer1234 '18

-2

屏幕截图

请看一下图像,在右侧有两个选项patch和Tree。如果选择树,则可以查看每次提交的文件夹结构。


请考虑对屏幕截图做出更好的承诺,因此您不必进行过多的审查。
托尔比约恩Ravn的安徒生
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.