git - 在合并到 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
这在简单的情况下工作正常:
- 主题分支是从 master 分支的
- 没有从 master 到 topic 的合并(有时在合并到 master 之前解决冲突是必要的)
如果其中任何一个不成立,则changes.diff
开始持有其他 MR 引入的更改。我该如何改进这个脚本?
解决方案
推荐阅读
- sql-server - 从 SQL Server 中的 SELECT 结果中获取最频繁的值
- javascript - 使用 android/IOS 应用程序发送 whatsapp 消息
- javascript - 将具有多个父级的图形数据转换为 jstree Javascript 的数据
- android - 无法发送 POST
- c - VS Code:没有这样的文件或目录
- spring - 禁用 Open Service Broker API 的 ServiceBrokerExceptionHandler
- bootstrap-4 - 单击按钮时避免 onClickRow 表引导
- javascript - Navigator.permissions.query:地理位置 onChange 在 Firefox 中不起作用
- python - 无法在 Conda env 中安装 Gensim - 找不到 noarch 目录
- r - 使用 r (dplyr) 跨类别和日期求和