Git:仅列出“未跟踪”文件(也是自定义命令)

时间:2010-09-27 05:30:20

标签: git git-status git-rm git-stage git-ls-files

有没有办法使用像git ls-files这样的命令只显示未跟踪的文件?

我问的原因是因为我使用以下命令处理所有已删除的文件:

git ls-files -d | xargs git rm

我喜欢类似未跟踪文件的内容:

git some-command --some-options | xargs git add

我能够找到-o的{​​{1}}选项,但这不是我想要的,因为它还会显示被忽略的文件。我还能够提出以下长而丑陋的命令:

git ls-files

似乎我必须在这里使用更好的命令。如果没有,我该如何创建自定义git命令?

9 个答案:

答案 0 :(得分:474)

要列出未跟踪的文件,请尝试:

git ls-files --others --exclude-standard

如果您需要将输出传递给xargs,那么使用git ls-files -zxargs -0来理解空格是明智的:

git ls-files -z -o --exclude-standard | xargs -0 git add

添加未跟踪文件的好别名:

au = !git add $(git ls-files -o --exclude-standard)

修改:供参考:git-ls-files

答案 1 :(得分:63)

如果您只想删除未跟踪的文件,请执行以下操作:

git clean -df
如果您还想包含特别忽略的文件,请

添加x。我全天都使用git clean -dfx一个很多

您只需编写一个名为git-whatever的脚本并将其放在路径中即可创建自定义git。

答案 2 :(得分:43)

git add -A -n会做你想要的。 -A将所有未跟踪的文件添加到仓库中,-n使其成为dry-run,其中未执行添加但是状态输出会列出将已被添加。

答案 3 :(得分:27)

接受的答案在带有空格的文件名上崩溃。我现在不确定如何更新alias命令,所以我将把改进的版本放在这里:

git ls-files -z -o --exclude-standard | xargs -0 git add

答案 4 :(得分:22)

一切都很简单

使用选项 -u 获取所有未跟踪文件的列表使用命令 git status ( - untracked -files)

git status -u

答案 5 :(得分:5)

查找可能添加的文件时。 git show的输出可以做到,但它还包含很多其他内容。以下命令对于获取相同的文件列表非常有用,但没有其他所有内容。

 git status --porcelain | grep "^?? " | sed -e 's/^[?]* //'

当在管道中组合以查找与特定模式匹配的文件然后将其传递给git add时,这非常有用。

git status --porcelain | grep "^?? "  | sed -e 's/^[?]* //' | \
egrep "\.project$|\.settings$\.classfile$" | xargs -n1 git add

答案 6 :(得分:4)

我知道这是一个老问题,但就列出未跟踪文件而言,我认为我会添加另一个也列出未跟踪文件夹的文件:

您可以使用git clean操作和-n(干运行)来显示它将删除哪些文件(包括.gitignore文件):

x

这样做的好处是显示未跟踪的所有文件所有文件夹。参数:

  • d - 显示所有未跟踪的文件(包括被git和其他人忽略,如构建输出等...)
  • n - 显示未跟踪的目录
  • tickPositions - 大多数重要! - dryrun,即实际上不删除任何内容,只需使用清理机制即可显示结果。

答案 7 :(得分:1)

我检查过的所有先前答案也会列出要提交的文件。 这是一个简单易用的解决方案,它仅列出尚未包含在文件中的文件。 回购且不受.gitignore约束。

git status --porcelain | awk '/^\?\?/ { print $2; }'

答案 8 :(得分:0)

我认为这与原版海报的内容完全相同:

git add .