首页 > 解决方案 > 如何检查自上次在 git 的主分支中提交以来文件夹或子文件夹是否已被修改?

问题描述

我的 git repo 有多个文件夹。一个独特的要求需要检查是否有任何文件夹已被更新/修改,如果是,那么做其他事情吗?git 中有没有办法检查自上次提交(主要)以来是否有任何文件夹或其内容被修改?建议?

标签: git

解决方案


Git 不存储 文件夹:Git 只存储文件,将它们保存在提交中——所以它实际上只是存储提交,然后再存储文件。文件的名称可能类似于path/to/file. 这不是一个名为的文件夹,其中path包含一个名为的文件夹,该文件夹to包含一个名为file. 它只是一个名为path/to/file. (这个奇怪的存储系统是 Git 的index的产物,它不能保存文件夹,只能保存文件。有一些技巧可以工作,使用子模块来伪造东西,这将允许你说服 Git 创建一个空文件夹. 但一般Git只存储commits-that-store-files.提取时提交的文件归档——每个提交就像tgz这些文件的完整归档——Git 知道你的操作系统需要文件夹,并会根据需要创建它们。)

除此之外:让 Git 将某些提交的存储内容与某些文件集进行比较很容易。执行此操作的最面向用户的 Git 命令是git diff. 该命令可以:

  • 比较存储库中的两个提交;
  • 将一个提交与您在存储库中的工作树中的内容进行比较;
  • 将一个提交与 Git索引中的内容进行比较;
  • 将一个提交与独立文件夹(不是任何工作树的一部分)中的一组文件进行比较;
  • 比较两个完全在 Git 之外的独立文件夹;

以及更多的操作。有关完整的详细信息,请参阅git diff文档

diff 操作可以这样描述:

  • 将一个文件或一组文件放在屏幕左侧。
  • 将另一个文件或一组文件放在右侧。
  • 玩找不同的游戏:描述如何修改左侧图像以使其与右侧图像匹配。

要使用出现在此处命名为左侧的git diff某个分支上的最新提交,只需使用名称作为第一个(即左侧)并且可能只使用提交说明符。一般来说,您可能希望在此处使用,这样它不会向您展示如何更改每个文件,而只是说明每个文件是否已更改,或者是否添加或删除了某些文件。BBgit diff --name-status

由于 Git 仅在此级别处理文件,因此如果您希望以某种方式合并输出,则由您决定将其path/to/file转换为您想要的任何文件夹名称(path或)。path/togit diff


推荐阅读