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

Ano*_*ous 180 git source-control

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

slh*_*hck 182

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

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

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

如果您想获取曾经存在的所有文件的列表,请参见此处

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

  • 运行“git ls-files”将为您节省几个字符:) (14认同)
  • 谢谢你的回答。我正在寻找这个。请注意,`git ls-tree -r master --name-only` 将执行与第一个选项相同的操作,而无需使用 `cut`。啊,如果您只想将此列表用于当前所在的任何分支,您可以指定 `HEAD` 而不是 `master`。 (6认同)

Mih*_*otă 81

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` 当然更简单。 (6认同)

And*_*Dog 5

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
Run Code Online (Sandbox Code Playgroud)

例子:

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
Run Code Online (Sandbox Code Playgroud)

如果您希望指定对于当前(shell)目录的路径,则可以执行以下操作:

alias gls='git ls-tree -r master --name-only HEAD "`git config core.worktree`"'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,它会打印

README
../../../etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)