2012-01-25 39 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-