2012-01-25 41 views
20

当我做git status时,我得到一个前缀为new file:的文件列表。我怎样才能得到这个清单?我想通过一个简单的循环在一个小shell脚本中处理这些文件。git:仅列出新文件

+0

你试过'grep'吗? 'git status | grep新文件“。 – Zeta

+0

是的,但这并不能让我获得纯文件名。 – BetaRide

+2

我宁愿使用'git ls-files --other --exclude-standard'(http://stackoverflow.com/a/2299448/6309) – VonC

回答

15

我会使用类似git status --porcelain | grep "^A" | cut -c 4-

+0

几年后,但这不再适用于我(“git status”的输出可能已更改)。 **编辑:** Bah。没有添加/承诺它。经得起时间考验! – Hendy

12

您可以使用git status --short来获取文件列表。

+5

这不应该被忽视。 – jarederaj

54

不要使用grep解析git的输出。 Git几乎可以肯定你正在寻找内置的东西(除非你需要真正先进的东西)。
您可以使用git diff来显示更改。 --name-only只显示文件名。 --diff-filter=A只列出添加的文件。
如果您想要查看已添加到索引中的新文件,请使用--cached,否则请忽略它。要看到这两个差异HEAD
的命令是这样的:

git diff --name-only --diff-filter=A --cached # All new files in the index 
git diff --name-only --diff-filter=A   # All files that are not staged 
git diff --name-only --diff-filter=A HEAD  # All new files not yet committed 
+2

差异过滤器实际上是要走的路:) –

+1

很不幸,OP不接受这个答案,就像我愚蠢的看法,你是完全正确的。 :) –

8

而不是解析的“混帐地位”的输出,它可能是更优雅的使用

git ls-files -o --exclude-standard 

git statusls-files会产生相对于输出您的当前工​​作目录。

您可能希望包括--full-name选项:

git ls-files -o --exclude-standard --full-name 
+0

OP要求列出新文件,这个答案不需要任何其他程序管道输出到。我发现在Mac上git diff并没有像预期的那样工作,但是这样做:) –

+0

这显然是赢家。它适用于包含所有新文件的新目录。 – Ali

+0

但是请注意,这不适用于子目录。 最后我用'混帐diff'使我的脚本工作从库中的每个目录: '$ git的差异--name只--diff过滤= A HEAD' –

0

的新文件列表或获得的文件被添加到git的,可以使用类似git status -s | grep ??

[email protected]:~/project-repo-directory# git status -s | grep ?? 
?? src/.../file1.js 
?? src/.../file2.js 
?? src/.../file3.js 
.... 
git的地位和grep命令来了
0
git status | grep "new file:" | cut -c 14- 

git status | grep "modified:" | cut -c 14-