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

use*_*585 20 git automation batch-file

我是处理git的新手,但我有一个包含名为'test'的文件的存储库.我想检查特定文件是否已更改.反正有吗?

从大局来看,我正在编写一个批处理文件,如果发生了任何变化(我已经使用干运行选项找出),它将执行存储库的git克隆,除了测试文件外(即使测试文件也是如此)已经改变了,我不想执行git克隆)

如果您需要任何澄清并感谢您的时间,请告诉我

Pet*_*ott 16

您可以传递文件或目录名称,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,根本不使用输出,而只使用退出代码.

  • 退出代码正是我需要的 bash 脚本!谢谢 (2认同)
  • 很好的答案,但由于某种原因,当比较标记为有冲突的文件时,单独的“--exit-code”不会影响退出代码,即使文件包含在“git diff”期间显示的差异。不过,`git diff -s --exit-code $CONFLICTED_FILE` 可以工作。见于 git 2.27.0。 (2认同)

GoZ*_*ner 12

运用

git diff test
Run Code Online (Sandbox Code Playgroud)

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

git diff --name-only test
Run Code Online (Sandbox Code Playgroud)

  • `fetch`将报告远程和本地存储库之间的文件级差异.`diff`将在本地存储库和工作目录中生成文件之间的行级差异. (2认同)
  • 对于顺序脚本,您可以使用 `git diff --no-pager` 来防止 git 在分页器中显示结果 (2认同)

Pet*_*ren 1

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

  • 您可以要求 Git 服务器通过某种 API 运行您想要的命令。例如,浏览 GitHub 网页或使用其开发人员 API就属于此类。在这种情况下,GitHub 的 Web 服务器正在为您运行 Git 命令。如果您使用的服务器不是裸 Git,请检查您的服务器是否有可以提供帮助的 API。
  • 使用git-archive下载包含部分存储库的存档。我不认为这会对你有帮助。