检查git仓库中的特定文件是否已更改

问题描述 投票:0回答:5

我是处理 git 的新手,但我有一个存储库,其中包含一个名为“test”的文件。我想检查该特定文件是否已更改。有办法做到这一点吗?

从大局来看,我正在编写一个批处理文件,如果有任何更改(我已经使用试运行选项弄清楚了),则该批处理文件将执行存储库的 git 克隆,测试文件除外(这意味着即使测试文件已更改,我不想执行 git 克隆)

如果您需要任何说明,请告诉我,感谢您抽出时间

git batch-file automation
5个回答
88
投票

您可以将文件或目录名称传递给

git diff
以仅查看对该文件或目录的更改。

如果您正在“编写批处理文件”,那么将

--exit-code
切换到
git diff
可能特别有用。例如。

git diff --exit-code test

或:

git diff --exit-code path/to/source/dir

如果名为

test
的文件(或任何其他指定的文件或目录)发生更改,则返回 1,否则返回 0。 (允许脚本根据结果进行分支。)

要仅查看已更改文件的名称(而不是完整的差异),请使用

--name-only
x,或者您可以使用
-s
根本不获取任何输出,而仅获取退出代码。


20
投票

使用

git diff test

将显示工作目录

test
和存储库版本之间的差异。 使用
diff
将显示实际差异;如果您对这些用途不感兴趣

git diff --name-only test

3
投票

正如 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 文档)。

参考

这个答案,了解有关表达式末尾模式的更多详细信息。


1
投票
Git 不提供查询远程存储库历史记录的方法。 Git 命令旨在针对本地存储库运行,因此您必须首先

clone

 (如果您之前克隆过一次,
fetch
 会更便宜)。也就是说,有一些方法可以绕过这个限制:


0
投票
“检查该特定文件是否已更改。”

到目前为止的 git diff 答案仅指示文件是否已更改,但不指示文件是否已暂存。例如:

    修改文件“test”
  • 运行“git diff --exit-code test”,这样就可以正常工作了
  • 运行“git add test”现在测试已上演
  • 运行“git diff --exit-code test”将不会检测到它已更改
要检测文件是否在本地更改或更改是否已暂存,请使用:

git status -s test MM test -- or -- git status -s test M test -- or -- git status -s test M test

    “M”表示仅本地更改。
  • “M”表示仅分阶段更改。
  • 两个“MM”既代表局部变更,也代表阶段性变更。
  • 空响应意味着没有本地更改,也没有分阶段更改
PS。 git status 没有 --exit-code CLI 参数。使用脚本,您必须检查是否有输出。

© www.soinside.com 2019 - 2024. All rights reserved.