35

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

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

让我知道您是否需要任何澄清并感谢您的时间

4

4 回答 4

56

您可以传递文件或目录名称以git diff仅查看对该文件或目录的更改。

如果您正在“编写批处理文件”,那么--exit-code切换到git diff可能特别有用。例如。

git diff --exit-code test

或者:

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

如果命名的文件test(或任何其他指定的文件或目录)发生更改,则返回 1,否则返回 0。(允许脚本在结果上分支。)

要仅查看已更改文件的名称(而不是完整的差异),请使用--name-onlyxor 您可以使用-s它根本不获取任何输出,而只是获取退出代码。

于 2018-05-01T13:28:48.060 回答
16

使用

git diff test

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

git diff --name-only test
于 2013-07-22T22:38:09.040 回答
1

Git 不提供查询远程存储库历史记录的方法。Git 命令旨在针对本地存储库运行,因此您必须clone首先执行(fetch如果您之前克隆过一次会更便宜)。也就是说,有一些方法可以解决这个限制:

  • 你可以通过某种 API 让你的 Git 服务器运行你想要的命令。例如,浏览 GitHub 网页或使用他们的开发者 API就属于这一类。在这种情况下,GitHub 的 Web 服务器正在为您运行 Git 命令。如果您使用的是裸 Git 以外的服务器,请检查您的服务器是否有可以提供帮助的 API。
  • 使用git-archive下载包含存储库部分的存档。我不认为这会对你有所帮助。
于 2013-07-22T21:52:36.677 回答
0

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

有关表达式末尾模式的更多详细信息,请参考此答案。

于 2019-07-31T12:36:41.207 回答