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

如何查询SVN分支未合并至主干的文件及指定文件全修订记录

我来帮你搞定这几个Subversion版本管理里的常见需求,都是日常协作中经常用到的实用操作:

1. 检查单个特性分支中未合并到主干的文件

如果只是针对某一个特性分支,直接用mergeinfo命令就能快速定位未合并的内容:

svn mergeinfo --show-revs eligible ^/trunk ^/branches/your-feature-branch
  • --show-revs eligible:指定只显示**可合并到目标(这里是主干)**的修订版本
  • 第一个路径是目标分支(主干),第二个是需要检查的特性分支

要是想直接看到这些修订对应的具体文件,可以结合svn log做进一步提取:

svn mergeinfo --show-revs eligible ^/trunk ^/branches/your-feature-branch | while read rev; do
    svn log -r $rev -v ^/branches/your-feature-branch | grep -E "^   [MAD]"
done | sort | uniq

这个命令会把每个未合并修订里变更的文件提取出来,去重后展示。

2. 获取指定文件在主干及所有分支的全部修订版本列表

要追踪某个文件在所有分支和主干的完整提交记录(而非仅主干上的合并记录),用svn log加上--stop-on-copy参数就能实现:

svn log --stop-on-copy --verbose ^/path/to/your/target-file
  • --stop-on-copy:会追踪文件的起源节点(比如从主干复制到分支的时刻),完整展示分支上的所有提交,不会截止到复制操作
  • --verbose:会显示该文件在每个修订中的具体变更细节

如果要批量遍历所有分支里的这个文件,可以用下面的小脚本:

#!/bin/bash
TARGET_FILE="^/path/to/your/target-file"
BRANCHES=$(svn ls ^/branches | grep "/$" | sed 's/\/$//')

echo "=== 主干中文件的提交记录 ==="
svn log --stop-on-copy --verbose $TARGET_FILE
echo -e "\n=== 各分支中文件的提交记录 ==="
for branch in $BRANCHES; do
    echo -e "\n--- 分支 $branch ---"
    svn log --stop-on-copy --verbose ^/branches/$branch/$(basename $TARGET_FILE) 2>/dev/null || echo "该分支中不存在此文件"
done

3. 查询所有SVN分支中未合并到主干的文件

如果要一次性检查所有分支里未合并到主干的文件,用这个批量处理脚本就能搞定:

#!/bin/bash
TRUNK_URL="^/trunk"
BRANCHES_URL="^/branches"

# 获取所有分支的列表
BRANCHES=$(svn ls $BRANCHES_URL | grep "/$" | sed 's/\/$//')

for BRANCH in $BRANCHES; do
    echo "====================================="
    echo "分支 $BRANCH 未合并到主干的文件:"
    echo "-------------------------------------"
    # 获取该分支中可合并到主干的修订
    ELIGIBLE_REVS=$(svn mergeinfo --show-revs eligible $TRUNK_URL $BRANCHES_URL/$BRANCH)
    if [ -z "$ELIGIBLE_REVS" ]; then
        echo "无未合并变更"
        continue
    fi
    # 提取每个修订对应的变更文件
    echo "$ELIGIBLE_REVS" | while read REV; do
        svn log -r $REV -q -v $BRANCHES_URL/$BRANCH | grep -E "^   [MAD]" | awk '{print $2}'
    done | sort | uniq
done

这个脚本会自动遍历所有分支,逐个检查未合并的修订,提取出所有变更过的文件并去重,按分支清晰展示结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:53