Subversion:如何获取所有活动的,未合并的分支的列表

时间:2017-08-03 12:44:37

标签: svn tortoisesvn branch

我的问题类似于Mercurial: List all unmerged branches,但对于SVN,不是Mercurial。

我需要找到一种方法来列出尚未合并到我的所有当前已开放的分支(通常是主干)。

据我所知,Git中的等效功能是git branch --no-mergedgit branch --merged

为了澄清,我要求提供未合并的修订列表,就像过去提出的许多其他StackOverflow问题一样。

我接受任何能够列出尚未合并的所有有效分支的解决方案。如果这不可能,那么我将接受一个列出所有活动的合并分支的答案,让我可以向后工作。

例如,如果我在repo/trunk上,并且回购有这些分支:

  • repo/branches/b1尚未合并到主干
  • repo/branches/b2已合并
  • repo/branches/b3已在之前的修订版中删除,且未合并
  • repo/branches/b4在合并后被删除

您的解决方案应返回b1或b2,但绝不能返回b3或b4。

2 个答案:

答案 0 :(得分:1)

首先,您必须列出HEAD修订版中的所有分支:

svn list repo/branches/ -r HEAD

然后,您必须遍历结果,并检查mergeinfo。这是一个可以保存为* .bat文件的脚本:

@echo off

for /f %%b in ('svn list repo/branches -r HEAD') do call :revisions %%b

exit /b

:revisions
for /f %%r in ('svn mergeinfo --show-revs eligible repo/branches/%1 repo/trunk') do (
    echo repo/branches/%1
    exit /b
)

我在这里使用:revision 子例程,因为当我看到可用于合并的第一个修订版时,我想退出它。这就是为什么这个程序不会打印重复的分支。

答案 1 :(得分:1)

对于使用MacOS或Linux的人们,这是一个基于Peska's answer的简单bash脚本。您可以在命令行上将路径传递到分支和主干文件夹,否则它将默认为默认的远程路径^ / branches和^ / trunk

#!/bin/bash

BRANCHDIR=${1:-^/branches}
TRUNKDIR=${2:-^/trunk}

for branch in $(svn list "$BRANCHDIR" -r HEAD)
do
    for revision in $(svn mergeinfo --show-revs eligible "$BRANCHDIR/$branch" "$TRUNKDIR")
    do
        echo "$BRANCHDIR/$branch"
        break
    done
done