有没有办法找到从SVN分支创建的所有分支?

时间:2017-08-04 06:44:09

标签: svn tortoisesvn subversion-edge

我正在尝试列出从父SVN分支创建的所有分支,以在Subversion中建立分支的图形表示。
是否有可用于实现此目的的SVN命令?
或者有解决方法吗?

示例:

家长分行:Branch1
子分支:Branch2和Branch3(从Branch1创建的两个分支) GrandChildren分行:Branch2.1,Branch3.1等,
鉴于 Branch1 ,我正在尝试列出分别从Parent Branch(Branch1)和Child Branches创建的子分支和Grand Children分支。

结果:

Branch1 ------------------- Branch2 ------- Branch2.1,Branch 2.2 ..
   | __________________ Branch3 ------- Branch3.1,Branch3.2 ...
                       

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题需要解决。但是我限制了我对孩子们的搜索。制作一个递归脚本可以让你找到大孩子。

因为我必须检查的存储库有很多分支和提交,svn log命令可能非常慢。所以,我分两步完成了工作:

  1. 检索创建Children分支的提交日志。我把它们保存在一个文件中,只有一行:

    parent='/branches/2014/new-components'
    svn log  https://svn.abc.org/branches/ -r1903:HEAD -v | ack -C2 "A.+\(from ${parent}:[0-9]+" >> kids.log
    

    -r1903是为了限制搜索以尝试加速一些事情。我知道父分支是在r1903创建的,所以不需要先查看。

    我使用ack,但grep的工作方式相同。

  2. 我写了一个python 2.7脚本来解析kids.log文件:

    from __future__ import print_function
    
    import re
    import subprocess
    
    parser = argparse.ArgumentParser()
    parser.add_argument("file", help="svn log file to parse")
    args = parser.parse_args()
    
    parent='/branches/2014/new-components'
    
    # Regexp to match the svn log command output
    #    1st match = revision number
    #    2nd match = author
    #    3rd match = date of creation
    #    4th match = branch path
    #    5th match = 1st line of commit message
    
    my_regexp = re.compile(r'r([0-9]+) \| (.+) \| ....-..-.. ..:..:.. \+.... \((.+)\) \| [0-9]+ lines?\n'
                           'Changed paths:\n'
                           ' *A (.+) \(from '+parent+':[0-9]+\)\n'
                           '\n'
                           '(.+)\n')
    
    with open(args.file, 'r') as f:
        matches = my_regexp.finditer(f.read())
    
    # print kids name
    bnames =  [m.group(4) for m in matches]
    print('\n'.join(bnames))
    

    提示:我用以下内容替换最后两行以收集所有匹配项:

    allinfo = [[m.group(i) for i in range(1,6)] for m in matches]
    

    然后你可以循环allinfo并根据需要打印出你需要的信息。

  3. Grand kids:要制作递归脚本,必须在一个python脚本中将步骤1和2转换为函数。第2步将调用步骤1,并将找到的孩子名称作为参数。对象可以帮助跟踪整个家谱。