You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自动确定SVN合并至指定版本时的起始版本

如何自动确定SVN合并的起始版本并写入脚本

SVN通过svn:mergeinfo属性记录分支已合并的修订历史,这也是直接合并trunk HEAD时能自动识别起始版本的核心机制。要实现自动合并到指定版本,关键是从该属性或SVN命令中提取已合并的最新修订号,进而确定待合并的起始版本。

方法一:使用svn mergeinfo直接获取待合并的起始修订号

SVN提供了mergeinfo子命令,可以直接列出当前分支尚未合并的trunk修订号。通过这个命令能快速得到合并的起始版本:

# 获取当前分支中待合并的trunk起始修订号
start_rev=$(svn mergeinfo --show-revs eligible "^/trunk" . | head -n 1)

# 指定要合并到的trunk目标版本
target_rev=2523

# 检查是否有待合并的修订
if [ -z "$start_rev" ]; then
    echo "没有需要合并的修订版本"
    exit 0
fi

# 检查目标版本是否早于起始版本(即已全部合并)
if [ "$target_rev" -lt "$start_rev" ]; then
    echo "目标版本已全部合并到当前分支"
    exit 0
fi

# 执行合并
svn merge -r "$start_rev:$target_rev" "^/trunk"

方法二:解析svn:mergeinfo属性提取最后合并的修订号

如果需要更底层的控制,可以直接读取svn:mergeinfo属性,解析出已合并的trunk最新修订号:

# 获取当前分支的mergeinfo属性
mergeinfo=$(svn propget svn:mergeinfo .)

# 提取trunk对应的合并记录
trunk_merge_record=$(echo "$mergeinfo" | grep "^/trunk")

# 解析出已合并的最新修订号
# 处理两种情况:单一版本(如^/trunk:2417)或版本范围(如^/trunk:2417-2526)
last_merged_rev=$(echo "$trunk_merge_record" | sed -E 's/^\/trunk:([0-9]+)-([0-9]+)$/\2/' | sed -E 's/^\/trunk:([0-9]+)$/\1/')

# 待合并的起始版本为最后合并版本+1
start_rev=$((last_merged_rev + 1))

# 指定目标版本
target_rev=2523

# 执行合并(SVN会自动跳过已合并的版本,即使起始版本包含已合并项)
svn merge -r "$start_rev:$target_rev" "^/trunk"

注意事项

  • 执行脚本前确保当前目录处于发布分支的工作副本中。
  • 若分支从未合并过trunk内容,mergeinfo属性可能不存在,此时起始版本应为1(或根据实际需求调整)。
  • 合并后建议执行svn status检查冲突,并提交合并结果。

内容的提问来源于stack exchange,提问作者basin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:54:58