如何查找从上次git pull更改的文件夹?

5f0d552i  于 2022-10-23  发布在  Git
关注(0)|答案(2)|浏览(216)

我有一个存储库,里面有几个文件夹和许多子文件夹和文件:
/文件夹1/。。。。
/文件夹2/。。。。
/文件夹3/。。。。
每当我更改一个(或多个)时,自动化系统应该git提取更改并重新编译代码。每个文件夹都有自己的编译脚本,编译每个脚本需要很长时间。有没有办法知道,对于我将要进行的更改,修改后的文件夹是什么,这样我就可以只运行那些需要的编译脚本,而不是所有的脚本?

new9mtju

new9mtju1#

先获取:

git fetch

选项1

因此,假设您想检查当前分支与原始分支相比,文件夹中是否有更改:

$ git diff --quiet HEAD origin/<branch> -- <path/to/dir> || echo changed

例如:

$ git diff --quiet HEAD origin/master -- folder1 || echo changed

如果自最近的fetch以来folder1中有任何更改,您将在控制台中看到单词“changed”:

changed

选项2

让我们看看发生了什么变化:

git diff <branch>...origin/<branch> <path/to/dir>

例如:

git diff master...origin/master folder1

如果指定路径中有更改,Git将输出这些更改。然后你可以合并。

git merge origin/<branch>

之后,您可以编译项目(如果需要)。

此外

您还可以查看给定文件夹中最后n次提交中是否有更改。为此,可以运行以下命令:

git log --name-status -n <path/to/dir>

例如:

git log --name-status -2 folder1

这将允许您查看folder1文件夹中最后2次提交的更改。

l2osamch

l2osamch2#

如果自动化系统插入到已知的托管解决方案中(例如:github、gitlab、azure devops的CI作业…),您应该能够获得“该分支的上一次提交是什么?”根据触发器中的数据。
检查托管服务的文档。
仅使用git数据的简单解决方案:

  • 写下即将被拉的分支上的当前提交
  • 拉取更改
  • 检查新提交和上一次提交之间的差异

假设您使用master


# current commit on your branch:

old=$(git rev-parse HEAD)

# pull the changes:

git pull origin master

# check the different files between the two commits:

git diff --name-only $old HEAD
git diff --name-status $old HEAD

从您的问题来看,您似乎只对顶层目录上的差异感兴趣,您可能会得到一个更直接地描述git diff-tree的结果:

git diff-tree --name-only $old HEAD

相关问题