2014-05-19 61 views

回答

1

您可以使用下面的命令鏈:

git ls-files | grep -v "$(git diff --name-only <from-commit> <to-commit>)" 

git ls-files列出了在版本控制下的所有文件,而git diff --name-only <from-commit> <to-commit>將列出承諾範圍,其得到了指定更改的文件。

grep -v返回所有未被給定模式匹配的行(逆匹配)。

希望有幫助!


如果你有問題的Argument list too long錯誤,那麼你可以用下面的shell腳本:

#!/bin/bash 

git diff --name-only $1 $2 | { 
    files="$(git ls-files)" 

    while read line 
    do 
     files=$(echo "$files" | grep -v $line) 
    done 

    echo "$files" 
} 

這個腳本會排除所有文件的列表每次迭代一個文件路徑,所以你應該從來沒有遇到過Argument list too long錯誤。

您可以通過將腳本保存到文件中並使用提交範圍的提交散列來執行它,這些提交範圍的文件應該從結果中排除。

+0

謝謝,它適用於小提交,但對於太大的提交,grep會拋出'參數列表太長'。 – jwall

+1

@jwall我用另一種方式編輯帖子來完成同樣的事情。這應該適合你。 –

相關問題