2009-06-13 59 views
0

我想这个过程自动化之间传输:SVN:如何自动提交分支机构

  1. 一些来自外部系统,比方说35
  2. 搜索并找到SVN提交其在具有#35他们对分支A的评论。
  3. 将这些提交的所有更改列表提交给提交之前的提交。
  4. 将此更改应用于分支B.

例如,如果rev 95在其注释中包含#35,并在94版本中引入了新文件,请添加[Add File x.txt]。 Rev 132在其评论中有#35,并且它在x.txt中改变了一行。添加这也[更改行n,文件x.txt]。等等。现在我们有更改列表:

[Add File x.txt] 
[Change line n, file x.txt] 
... 

应用此更改分支B.

这能在SVN实现?什么是命令(或命令行以外的方式)?那里是否存在涵盖这些操作的必要命令的文档?

回答

1

你要知道刚提交的用户(一个或多个),然后结账/开关分支B,和svn合并-c 123,125如果修订是123和125

参见SvnBook on merging

1

如果您的开发人员有足够的纪律以便始终在提交日志消息中写入故障单编号,则可以使用此Perl脚本搜索日志消息中包含指定单词的修订版。第一次检出分支B的工作副本,然后将工作副本中,运行

perl merge-ticket.pl searchWord sourceURL 

指定票号和分支A.库URL脚本合并来自一个分支匹配的版本到工作副本。

# merge-ticket.pl 
use strict; 
use XML::Parser; 

if ($#ARGV != 1) { 
    die "usage: $0 searchWord sourceURL\n"; 
    exit 1; 
} 
my $searchWord = $ARGV[0]; 
my $sourceUrl = $ARGV[1]; 

my @revisions =(); 

my $revision; 
my $inMsg; 
my $message; 

sub startTag { 
    my($parser, $tag, %attrs) = @_; 

    if ($tag eq 'logentry') { 
     $revision = $attrs{'revision'}; 
    } elsif ($tag eq 'msg') { 
     $inMsg = 1; 
     $message = ''; 
    } 
} 

sub endTag { 
    my($parser, $tag) = @_; 

    if ($tag eq 'msg') { 
     $inMsg = 0; 
     if ($message =~ /\b$searchWord\b/) { 
      push(@revisions, $revision); 
      print "$revision: $message\n"; 
     } 
    } 
} 

sub characterData { 
    my($parser, $data) = @_; 

    if ($inMsg) { 
     $message .= $data; 
    } 
} 

# Search commit log messages for word. 
my $command = "svn log --xml $sourceUrl"; 
open(INPUT, "$command|") || die "Error executing $command: $!\n"; 
my $parser = new XML::Parser(
     Handlers => { 
      Start => \&startTag, 
      End => \&endTag, 
      Char => \&characterData}); 
$parser->parse(*INPUT); 
close(INPUT); 

if ($#revisions < 0) { 
    print "No log messages containing $searchWord found\n"; 
    exit 1; 
} 

# Merge found revisions into working copy. 
my $changes = join(',', reverse(@revisions)); 
$command = "svn merge -c$changes $sourceUrl"; 
print "$command\n"; 
system $command; 
+0

哇,这看起来像一个很棒的作品,并且完全符合我的需求。如果只有我知道一点Perl(:我会尝试理解并将其转换为C#,谢谢。 – 2009-06-14 20:10:59