我正在使用 git-svn 来处理 svn 存储库。吉特master
分支是svn的镜像trunk
分支(唯一使用的 svn 分支),即 master 分支和 trunk 分支上的元素之间存在一对一的关系。
我想要有与 svn 修订相对应的 git 标签,这样我就可以做类似的事情git diff r123 workbranch
看看我与 svn 修订版 123 相比做了什么。
当我这样做时,修订没有被标记git svn rebase
,所以我创建了以下脚本,在 svn rebase 后运行:
#!/usr/bin/perl
use strict;
use warnings;
open(PIPE, "git log master |");
# Format for the pipe output:
# ...
# commit 6b24b8fdc6a25d35b01140dc1ac054697133423d
# ...
# git-svn-id: https://server.example.com/svn/project/trunk@594 164096ca-3471-41d1-a9ce-9541462a8c31
# ...
my $commit = "";
my $i = 0;
foreach my $line (<PIPE>) {
if ($line =~ /^commit ([\da-f]+)/) {
$commit = $1;
next;
}
next unless $line =~ /^\s+git-svn-id: .*\/trunk\@(\d+) /;
my $git_svn_id = $1;
run("git", "tag", "-f", "r$git_svn_id", $commit);
last if $i++ == 20;
}
close(PIPE);
sub run {
print join(' ', @_), "\n";
return system(@_);
}
这个脚本完成了工作,但我每次都必须手动运行它,并且我(任意)在检查最后 21 个修订时限制了它,因此理论上存在遗漏某些修订的风险(但我会从打印中看到这一点) 。
问题:有什么方法可以自动执行此操作,以便我只需运行git svn rebase
所有导入的修订都会在 git 中标记吗?任何hooks http://git-scm.com/book/en/Customizing-Git-Git-Hooks我可以用?
聚苯乙烯
是的,我知道 svn find-rev,但我绝对不想编写像这样复杂的命令git diff $(git svn find-rev r123) $(git svn find-rev r124)
而不仅仅是git diff r123 r124
.