我使用SVN,有一个稳定的生产分支和一个不稳定的主干。对于每个版本,我们都会从主干中挑选要合并到生产中的项目。
我已经用git克隆了我的SVN,这样我就可以更快地搜索我需要合并的提交(因为我在提交消息中搜索JIRA id )。但是,我仍然在它的末尾与svn合并进行合并。
这个长期存在的生产分支的问题之一是,在主干中可能会有未合并的提交。
为了解决这个问题,我偶尔运行:
svn mergeinfo --show-revs eligible https://my.server/svn/trunk https://my.server/svn/branches/PROD_V3.00
不过,这实在是太慢了。在git中的等效值是
git log prod..master
但是,这似乎只是列出了所有提交。
这是由于git没有识别svn合并和svn:mergeinfo属性吗?
有什么方法可以让我快速获得合格的提交吗?
编辑:
我尝试了Joes,但是,git cherry只输出SHA,我需要SVN修订版来完成合并。因此,我不得不通过git svn find-rev来查找SVN ids来获得我需要的东西。
git cherry prod master|cut -d' ' -f2|while read -r line; do git svn find-rev "$line"; done;
不幸的是,这比svn mergeinfo --show-revs eligible慢。
发布于 2013-03-23 07:06:44
如果提交是经过精心挑选的,那么您现在有两个提交副本。Git将显示master中的所有提交,即使它们在prod中有一个副本。
类似的情况可能是:
git cherry master prod这将向您展示在master中没有被选中到prod中的任何提交。
发布于 2014-12-19 16:07:01
如果您能够在Perl中工作,那么git-svn只是一个大型perl脚本,而git svn find-rev是该perl脚本中的一个函数。您可以使用它编写代码,这将避免每次读取rev_map文件。
所以,我的想法是:
git cherry prod master|cut -d' ' -f2|while read -r line; do git svn find-rev "$line"; done变得更像这样(不完整,也没有运行b/c ++,我不再有git-svn回购):
#!/usr/bin/perl
use Carp;
use Git::SVN;
# use ...the rest of the Git::SVN module...
# ...initialize whatever is necessary...
open(ELIGIBLE_COMMITS, "git cherry prod master") || croak "Couldn't do git cherry";
while (<ELIGIBLE_COMMITS>) {
($ignore, $sha1) = split;
my (undef, $rev, undef) = cmt_metadata($sha1);
print "$rev\n";
}
close(ELIGIBLE_COMMITS);您还可以考虑修改git-svn脚本的cmd_find_rev,以采取指定要查找的多个修订的附加选项,例如,
find-rev --file <filename>其中文件名可以是"-“来指定STDIN。
https://stackoverflow.com/questions/15580206
复制相似问题