代码之家  ›  专栏  ›  技术社区  ›  Sedat Kapanoglu johnnywhoop

收集Subversion中上次合并后的修订历史记录的最简单方法

  •  3
  • Sedat Kapanoglu johnnywhoop  · 技术社区  · 16 年前

    我通常会向分支提交多个更改,偶尔也会合并到主干。我想将所有提交消息保存在最终主干合并的最新修订说明中。我不想记住修订号或任何东西,我只想在提交之前以可编辑的方式收集“自上次合并到主干后所有提交到分支的消息”。

    由于此信息仅在mergeinfo中可用,我认为这必须由客户提供。我在OrtoiseSVN、SVN监视器或命令行客户端中没有找到此功能。有没有可能我错过了一些明显的东西?

    4 回复  |  直到 16 年前
        1
  •  3
  •   bobbogo    9 年前

    我希望我正确理解了你的要求。您可以尝试以下步骤: (通过svn命令行客户端):

    1. svn log -v --stop-on-copy http://myrepo/mybranch gives 输出一个报告,您可以使用该报告查找表示上次从分支到主干合并的修订号(XXXX)

    2. svn log -rXXXX:HEAD http://myrepo/mybranch > commitmessg.txt (假设您现在希望将分支的头版本合并到主干中)-这将把所有提交消息收集到文本文件中。您可能希望编辑此文件以包含有意义的第一行,如“合并如下的元素”或“合并与缺陷修复相关的所有元素&&&&”等等,然后保存。

    3. 像往常一样执行合并

    4. svn commit -F commitmessg.txt 因此,消息包含文本文件的内容(但我不确定提交消息的字符限制)

    我想也是通过陆龟来做的。

        2
  •  3
  •   tschaible    16 年前

    这并不完全是您想要的,但是您可以通过使用xargs将mergeinfo管道传输到svnlog命令中来构建提交消息列表。它看起来或多或少像这样:

    svn mergeinfo $SOURCE $DESTINATION --show-revs eligible | xargs -i  svn log $SOURCE -r '{}'
    
        3
  •  2
  •   stz184    12 年前

    另一个解决方案受@tschaible答案启发:

    $ svn mergeinfo --show-revs=eligible ^/branches/version | tr "\\n" "," | xargs -i svn log -c {} ^/branches/version
    

    基本上,这与@tschaible使用的想法相同,但速度要快一点,因为svnlog命令只运行一次,接受有问题的修订列表。 为了使命令稍微简单一点,您可以考虑在您的~/.BasHyAbases文件中添加一个别名如下:

    alias svnlog='tr "\\n" "," | xargs -i svn log -c {}'
    

    现在,您可以这样缩短命令:

    svn mergeinfo --show-revs=eligible ^/branches/version | svnlog ^/branches/version
    
        4
  •  0
  •   Mihkel Selgal    13 年前

    我有一些类似的问题,从主干到分支合并和提交更改,SVN1.7默认不提供svnmerge,所以我开发了小脚本来完成这项任务。

    下面是我合并和提交文件的bash脚本:

    #!/bin/bash
    
    usage() {
    cat << EOF
    
        usage: $0 options
    
        Script to simplify merging and commiting to prelive 
    
        OPTIONS:
           -h      Show usage
           -r      Specify file to use
           -s      Merge source location 
           -d      Place where You want ot merge 
    
    EOF
    }
    
    SOURCE= 
    DESTANATION= 
    REV= 
    # Provide revision number or list of revisions
    while getopts "hr:s:d:" OPTION; do 
        case $OPTION in 
            h) 
                usage
                exit 1
                ;;  
            r) 
                REV=$OPTARG
                ;;
            s)
                SOURCE=$OPTARG
                ;;
            d)
                DESTANATION=$OPTARG
                ;;
        esac
    done
    
    # Create commit message file 
    echo "Preperign commit info file..."
    FILE=commit-info.txt
    touch $FILE
    echo "Merged revision(s) $REV via costom merge script from" > $FILE
    svn info $SOURCE | grep 'URL' | awk '{print $NF}' >> $FILE
    
    LIST=`echo "$REV" | tr ',' ' '`
    
    # Get commit messages from source location 
    echo "" >> $FILE
    for commit in $LIST
    do
        svn log $SOURCE -r $commit >> $FILE
        echo "" >> $FILE
    done
    echo "Done...."
    
    # Merge changes from source location 
    echo "Starting merge....."
    svn merge -c$REV $SOURCE
    echo "Done merging...."
    
    # Commit changes to destanation 
    echo "Start commiting files to SVN...."
    svn commit -F $FILE
    rm $FILE
    echo "Complete"
    
    推荐文章