我是处理git的新手,但我有一个包含名为'test'的文件的存储库。我想检查特定文件是否已更改。反正有吗?
从大局来看,我正在编写一个批处理文件,如果发生了任何变化(我已经使用干运行选项找出),它将执行存储库的git克隆。除了测试文件外(意味着即使测试文件已经改变,我不想执行git clone)
如果您需要任何澄清并感谢您的时间,请告诉我
答案 0 :(得分:12)
使用
git diff test
将显示工作目录test
与存储库版本之间的差异。使用diff
将显示实际差异;如果您对这些使用不感兴趣
git diff --name-only test
答案 1 :(得分:12)
您可以将文件或目录名称传递给git diff
,以仅查看对该文件或目录的更改。
如果您正在编写批处理文件"然后--exit-code
切换到git diff
可能特别有用。例如
git diff --exit-code test
或:
git diff --exit-code path/to/source/dir
如果对名为test
(或任何其他指定文件或目录)的文件进行更改,则返回1,否则返回0。 (允许脚本分支结果。)
要仅查看已更改文件的名称(而不是完整差异),请使用--name-only
xor,您可以使用-s
来完全没有输出,只需退出代码。
答案 2 :(得分:1)
Git不提供查询远程存储库历史记录的方法。 Git命令旨在针对本地存储库运行,因此如果您之前克隆过一次,则必须先clone
fetch
会更便宜。也就是说,有一些方法可以解决这个限制:
答案 3 :(得分:1)
在answer of Peter Lundgren中已正确提及,
git命令旨在针对本地存储库运行,
因此无论如何都可能会调用git clone
。
另一方面,如果需要检查是否要触发某些特定的CI步骤,则可能会在脚本中找到类似以下有用的内容:
if git diff --quiet $COMMIT_HASH^! -- . ':!test'; then
echo "No significant changes"
else
echo "There are some significant changes, let's trigger something..."
fi
--quiet
禁用程序的所有输出,并暗示--exit-code
(请参见git documentation)。
参考this answer,以获取有关表达式末尾模式的更多详细信息。