问题描述
||
我正在尝试通过git svn将Git与Subversion一起使用,并将Subversion存储库中包含多个项目。项目结构如下所示:
根/
*项目1 /
树干/
标签/
SpecificBranchName1 /
SpecificBranchName2 /
项目2 /
树干/
标签/
SpecificBranchName1 /
等等
通过执行
git svn clone -s http://path/to/repo/Root/Project1 --no-follow-parent
,我可以将Project1放入git仓库中。但是,主干,标签以及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文件结构很奇怪。通常,分支位于./分支下,但由于某些原因,它们与标记和主干包含在同一文件路径中。反正还有什么可以克服的?
解决方法
您的绝对不是标准结构(当然您也自己说过),所以为什么要使用
-s
标志?
我建议您在svn中创建一个branchs文件夹,然后将移动的branch移入其中。这样可以避免您痛苦不堪。
如果由于各种原因您不能这样做,则可以对project1根目录执行git int,编辑.git / config并更改svn-remote
下的branchs部分:
branches = {SpecificBranchName1,SpecificBranchName2}:refs/remotes/branches/*
(根据相对网址的情况调整以上内容)
然后进行提取。
, 如果不需要分支,请尝试:
git svn clone http://path/to/repo/Root/Project1 --trunk=trunk --tags=tags Project1
也就是说,与您使用的第二个命令几乎相同,但是没有-b部分。如果不需要,7ѭ将不会尝试查找分支。
之后,您可以按照manojlds的建议尝试编辑.git/config
。
编辑:好的,我运行进一步的测试。我用您的文件夹结构重新创建了一个svn存储库。我试图在上面用ѭ7,一切都进行得很顺利。我正在使用git 1.7.1。
然后,我在Google代码搜索中查找了字符串“无法找到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;
}
...
我当然不会阅读ѭ7的整个代码,但是我的猜测是Git在主干中找到了一个合并点,并且合并来自一条Git不了解的路径,并且对于由于某些原因无法达到。
我试图重现这种情况,但一切都又成功了。可能的解决方案:
如果不是最新版本,请升级您的Git版本
确定中继中是否确实有来自SpecificBranchName1的合并,如果是,则仅使用该版本之后的修订来初始化您的Git存储库
我希望这有帮助...