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

#1 楼

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

git ls-tree -r master --name-only


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

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

git log --pretty=format: --name-only --diff-filter=A  | sort -u


评论


感谢你的回答。我一直在寻找。请注意,git ls-tree -r master --name-only将与第一个选项相同,而无需剪切。嗯,如果您只希望此列表包含当前所在的分支,则可以指定HEAD而不是master。

–毛利人
2012-09-13 10:15



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

– Zain R
15年5月14日在21:30

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

–阿德里安
19年4月15日在13:06

@Adrian不知道,那时已经粘贴了,现在已修复。

–slhck
19年4月15日在13:09

用$(git branch | grep \ * | cut -d''-f2)替换当前分支的master。

–爱德华
19年8月9日在19:33

#2 楼

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肯定更简单。

– karatedog
13-10-22在8:14

抱歉,我的编辑不是无效的。在当前的git中,没有git-ls-files二进制文件。 ls-files命令包含git二进制文件。该文档的链接内容正确,但从技术上讲,该链接适用于过时的二进制文件。

–JonnyJD
2014年1月11日,3:09

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

–寻宝者
2014年10月12日在20:16

@JonnyJD所有Git手册页都被命名为git-commit,git-init,git-ls-files等,即使程序实际上是子命令。从来没有过git-ls-files二进制文件。原因是它与外部子命令机制一致,该机制允许您通过编写git-foo二进制文件注册git foo命令。

–拉登·罗斯伯勒(Radon Rosborough)
17年7月19日在16:50

这确实很简单,但是另一方面,git ls-tree允许您指定“树状”(即分支,标记或提交),而git ls-files不提供该选项,因此仅在HEAD上有效。

–法比奥说恢复莫妮卡
20 Dec 15 '23:10

#3 楼

git ls-files仅会打印当前工作目录中的文件。例如,如果您有一个用于dotfiles的git repo(core.worktree = /),那么您将拥有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`"'


评论


在git v2.21中,git ls-files显示当前目录及以下目录中的所有文件。它只是不显示已在存储库中删除的文件。

–阿德里安
19年4月15日在13:17

#4 楼

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

评论


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

–fixer1234
18年3月12日在22:39

#5 楼



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

评论


请考虑对屏幕截图做出更好的承诺,因此您不必进行过多的审查。

–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
19年5月14日上午11:25