我正在尝试通过 git svn 将Subit与Subversion一起使用,其Subversion存储库中包含多个项目。项目结构如下所示:
根/
* PROJECT1 /
躯干/
标记/
SpecificBranchName1 /
SpecificBranchName2 /
Project2的/
躯干/
标记/
SpecificBranchName1 /
等
我可以通过git svn clone -s http://path/to/repo/Root/Project1 --no-follow-parent
将Project1变成一个git仓库。但是 trunk ,标记和 SpecificBranchName1 和 SpecificBranchName2 都在我的树结构中。
如果我删除 - no-follow-parent 标记,则会收到一条错误消息,指出“无法找到http://path/to/repo/Root/Project1/SpecificBranchName1的revmap”。如果我尝试,我会收到相同的消息:git svn clone -T trunk -t tags -b . http://path/to/repo/Root/Project1
我真的不需要我的git repo中的分支,所以我尝试用git svn clone -s --ignore-paths="^SpecificBranchName1" http://path/to/repo/Root/Project1
跳过它,但是得到了同样的错误。
据我所知,这个Subversion文件结构很奇怪。通常分支在 ./ branches 下,但由于某种原因,它们包含在与标记和 trunk 相同的文件路径中。无论如何都要过去吗?
答案 0 :(得分:1)
你的不是标准结构(当然你也是自己说过的)所以你为什么要使用-s
旗帜?
我建议你在svn中创建一个branches文件夹,然后将分支移动到那里。这样可以防止你的痛苦。
如果由于各种原因你不能这样做,你可以对project1 root执行git int,编辑.git / config并更改svn-remote
下的分支部分:
branches = {SpecificBranchName1,SpecificBranchName2}:refs/remotes/branches/*
(根据相对网址的方式调整以上内容)
然后进行获取。
答案 1 :(得分:1)
如果您不需要分支,请尝试:
git svn clone http://path/to/repo/Root/Project1 --trunk=trunk --tags=tags Project1
即,与您使用的第二个命令几乎相同,但没有-b部分。如果没有请求,git svn
将不会尝试查找分支。
之后,您可以尝试按照manojlds的建议编辑.git/config
。
编辑:好的,我进行了进一步的测试。我用你的文件夹结构重新创建了一个svn存储库。我尝试使用git svn
,一切顺利。我正在使用git 1.7.1。
然后我在Google Code Search中查找字符串“找不到revmaps”,发现了这个:
sub lookup_svn_merge {
...
my $gs = Git::SVN->find_by_url($url.$source, $url, $path);
if ( !$gs ) {
warn "Couldn't find revmap for $url$source\n";
return;
}
...
我肯定不会阅读git svn
的整个代码,但我从中推测出Git在trunk中发现了一个合并点,并且合并来自Git不知道的路径任何关于和由于某种原因无法达到的事情。
我试图重现这个案例,但一切都成功了。可能的解决方案:
我希望这会有所帮助......