在 pre-merge-commit 脚本中如何获取 git merge <branch2025> 命令中的目标分支名称?
比如当前我们开发分支是 dev/202403/r1, 同一时间也可能会有需求在 dev/202404/r1 上面进行开发。开发过程中禁止将 dev/202404/r1 分支的代码合并到 dev/202403/r1 。
解决该问题的思路是获取两个分支的名称,并提取其中的日期,判断日期先后顺序进行拦截。
现在遇到的问题就是能获取到当前分支名称 dev/202403/r1 ,但是获取不到 git merge <branch>后面的目标分支名称,请教大家是否有思路可以解决呢?
cat $1
失败通过$0 打印出来的内容可以看出,脚本执行其实是.git/hooks/pre-merge-commit ,在执行钩子脚本的时候 git merge 命令还会真正执行。但是理论上讲,命令已经提给 git 了,应该有什么骚操作可以拿到目标分支名称。
#!/bin/bash
# 获取当前分支名称
current_branch=$(git rev-parse --abbrev-ref HEAD)
# 获取目标分支名称
target_branch=`cat $1`
# 提取分支名称中的日期
current_date=$(echo $current_branch | grep -oP '\d{8}')
echo "当前所处分支:"$current_branch", 检测到迭代日期:"$current_date
target_date=$(echo $target_branch | grep -oP '\d{8}')
echo "要合并的分支:"$target_branch", 检测到迭代日期:"$target_date
# 检查日期是否存在
if [[ -z "$current_date" ]] || [[ -z "$target_date" ]]; then
echo "无法从分支名称中提取日期"
exit 1
fi
# 比较日期
if [[ "$current_date" -gt "$target_date" ]]; then
echo "禁止将大的日期合并到小的日期分支上"
exit 1
fi
# 允许合并
exit 0
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.