我是处理 git 的新手,但我有一个存储库,其中包含一个名为“test”的文件。我想检查该特定文件是否已更改。有没有办法做到这一点?
从大局来看,我正在编写一个批处理文件,如果有任何变化(我已经使用空运行选项发现),我正在编写一个批处理文件,它将执行存储库的 git 克隆,除了测试文件(这意味着即使测试文件已更改,我不想执行 git clone)
让我知道您是否需要任何澄清并感谢您的时间
我是处理 git 的新手,但我有一个存储库,其中包含一个名为“test”的文件。我想检查该特定文件是否已更改。有没有办法做到这一点?
从大局来看,我正在编写一个批处理文件,如果有任何变化(我已经使用空运行选项发现),我正在编写一个批处理文件,它将执行存储库的 git 克隆,除了测试文件(这意味着即使测试文件已更改,我不想执行 git clone)
让我知道您是否需要任何澄清并感谢您的时间
您可以传递文件或目录名称以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
它根本不获取任何输出,而只是获取退出代码。
使用
git diff test
test
将显示工作目录和存储库版本之间的差异。使用diff
将显示实际差异;如果您对这些用途不感兴趣
git diff --name-only test
Git 不提供查询远程存储库历史记录的方法。Git 命令旨在针对本地存储库运行,因此您必须clone
首先执行(fetch
如果您之前克隆过一次会更便宜)。也就是说,有一些方法可以解决这个限制:
正如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 文档)。
有关表达式末尾模式的更多详细信息,请参考此答案。