颠覆:如何获取所有活动的未合并分支的列表
Subversion: How to get a list of all active, unmerged branches
我的问题类似于 Mercurial: List all unmerged branches 但是针对 SVN,而不是 Mercurial。
我需要找到一种方法来列出所有当前打开但尚未合并到我的分支(通常是主干)。
据我所知,Git 中的等价特征是 git branch --no-merged
和 git branch --merged
为了澄清,我 不是 要求未合并 修订 的列表,就像过去提出的许多其他 Whosebug 问题一样.
我会接受任何能够列出所有 active 尚未合并的分支的解决方案。如果这不可能,那么我将接受列出所有活动的答案,合并 分支,允许我向后工作。
例如,如果我在 repo/trunk
,并且回购有这些分支:
repo/branches/b1
还没有合并到trunk
repo/branches/b2
已合并
repo/branches/b3
在之前的版本中被删除,未合并
repo/branches/b4
被合并后删除
您的解决方案应该 return b1 或 b2,但绝不能 return b3 或 b4。
首先,您必须列出 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 子例程,因为我想在看到第一个可合并的修订版时退出它。这就是为什么这个程序不会打印重复的分支。
对于那些使用 MacOS 或 Linux 的人,这里有一个基于 的简单 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
我的问题类似于 Mercurial: List all unmerged branches 但是针对 SVN,而不是 Mercurial。
我需要找到一种方法来列出所有当前打开但尚未合并到我的分支(通常是主干)。
据我所知,Git 中的等价特征是 git branch --no-merged
和 git branch --merged
为了澄清,我 不是 要求未合并 修订 的列表,就像过去提出的许多其他 Whosebug 问题一样.
我会接受任何能够列出所有 active 尚未合并的分支的解决方案。如果这不可能,那么我将接受列出所有活动的答案,合并 分支,允许我向后工作。
例如,如果我在 repo/trunk
,并且回购有这些分支:
repo/branches/b1
还没有合并到trunkrepo/branches/b2
已合并repo/branches/b3
在之前的版本中被删除,未合并repo/branches/b4
被合并后删除
您的解决方案应该 return b1 或 b2,但绝不能 return b3 或 b4。
首先,您必须列出 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 子例程,因为我想在看到第一个可合并的修订版时退出它。这就是为什么这个程序不会打印重复的分支。
对于那些使用 MacOS 或 Linux 的人,这里有一个基于
#!/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