我有一个存储库,里面有几个文件夹和许多子文件夹和文件:/文件夹1/。。。。/文件夹2/。。。。/文件夹3/。。。。每当我更改一个(或多个)时,自动化系统应该git提取更改并重新编译代码。每个文件夹都有自己的编译脚本,编译每个脚本需要很长时间。有没有办法知道,对于我将要进行的更改,修改后的文件夹是什么,这样我就可以只运行那些需要的编译脚本,而不是所有的脚本?
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次提交的更改。
l2osamch2#
如果自动化系统插入到已知的托管解决方案中(例如:github、gitlab、azure devops的CI作业…),您应该能够获得“该分支的上一次提交是什么?”根据触发器中的数据。检查托管服务的文档。仅使用git数据的简单解决方案:
git
假设您使用master:
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
git diff-tree --name-only $old HEAD
2条答案
按热度按时间new9mtju1#
先获取:
选项1
因此,假设您想检查当前分支与原始分支相比,文件夹中是否有更改:
例如:
如果自最近的fetch以来folder1中有任何更改,您将在控制台中看到单词“changed”:
选项2
让我们看看发生了什么变化:
例如:
如果指定路径中有更改,Git将输出这些更改。然后你可以合并。
之后,您可以编译项目(如果需要)。
此外
您还可以查看给定文件夹中最后n次提交中是否有更改。为此,可以运行以下命令:
例如:
这将允许您查看folder1文件夹中最后2次提交的更改。
l2osamch2#
如果自动化系统插入到已知的托管解决方案中(例如:github、gitlab、azure devops的CI作业…),您应该能够获得“该分支的上一次提交是什么?”根据触发器中的数据。
检查托管服务的文档。
仅使用
git
数据的简单解决方案:假设您使用
master
:从您的问题来看,您似乎只对顶层目录上的差异感兴趣,您可能会得到一个更直接地描述
git diff-tree
的结果: