在Git工作区中检测修改文件的简单方法是什么?

时间:2010-10-07 14:45:05

标签: git build-process makefile

在make期间,我创建了我嵌入链接输出中的字符串字段。很有用。

除了sed命令的复杂grep / git status解析之外,如何根据git轻松确定工作空间中的文件是否已被修改?< / p>

5 个答案:

答案 0 :(得分:43)

如果你只想要一个简单的“与HEAD有什么不同吗?”:

git diff-index --quiet HEAD

如果退出代码为0,则没有差异。

如果您想要“从HEAD更改了哪些文件?”:

git diff-index --name-only HEAD

如果您想要“从HEAD更改了哪些文件,以及更改(添加,删除,更改)了哪些方式?”:

git diff-index --name-status HEAD

如果要重命名(和复制)检测,请添加-M(和-C)。

这些命令将检查暂存的内容(索引中的内容)和工作树中的文件。像git ls-files -m这样的替代方案只会根据索引检查工作树(即它们将忽略工作树中的任何暂存(但未提交)内容)。

答案 1 :(得分:36)

git ls-files -m

要找到这个,你可以浏览git help -a

答案 2 :(得分:21)

git status --porcelain似乎提供了一个很好的可解析输出。

答案 3 :(得分:2)

git diff --name-only做同样的事情(可能更直观......)

答案 4 :(得分:0)

对于git hook,我发现此命令很有用

git diff-index --exit-code --ignore-submodules HEAD

例如

//run some static analysis check that can change the code
something_changed=`git diff-index --exit-code --ignore-submodules HEAD`
if [ -n "$something_changed" ]
then
    echo >&2 "Something changed in $local_ref, not pushing"
    exit 1
fi