首页 > 解决方案 > 在合并到 master 之前创建由 git 分支引入的更改补丁

问题描述

在合并请求的 gitlab CI 中,我想创建一个文件changes.diff来总结此合并请求引入的更改。

一些上下文:我有 CI 验证(使用 clang-format-diff)合并请求(MR)是否引入了一些与.clang-format样式的格式偏差并寻找新的#if 0. 重新格式化和清理整个项目在愿望清单上,但不会很快发生。但是当我们处于底部时,至少停止挖掘是个好主意。到目前为止,我有以下脚本:

oldrev=$(git rev-list HEAD --grep="Merge branch '.*' into 'master'" |head -n1)
newrev=${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-$(git rev-parse HEAD)}

# 1 Find what files changed, consider only added, copied, modified (ACM), not removed, moved
# 2 ignore files with extensions that suggest its not code
files=$(git  diff-tree --no-commit-id --name-only --diff-filter=ACM -r $oldrev $newrev | egrep "\.(c|cpp|cxx|cc|h|hpp|ipp|tpp)$")
if [[ -z "${files}" ]]; then
    echo "nothing interesting changed"
    exit 0
fi

echo "Changed files:"
echo $files

echo $files | xargs  git  diff  -U0 --no-color $oldrev $newrev --  > changes.diff

这在简单的情况下工作正常:

如果其中任何一个不成立,则changes.diff开始持有其他 MR 引入的更改。我该如何改进这个脚本?

标签: gitgitlab-ci

解决方案


推荐阅读