无法使用git svn使用Subversion存储库设置Git

时间:2011-05-27 16:15:35

标签: svn git git-svn multiple-projects

我正在尝试通过 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 相同的文件路径中。无论如何都要过去吗?

2 个答案:

答案 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不知道的路径任何关于和由于某种原因无法达到的事情。

我试图重现这个案例,但一切都成功了。可能的解决方案:

  • 升级您的Git版本,如果它不是最新的
  • 弄清楚是否确实存在来自trunk中的SpecificBranchName1的合并,如果是,则仅使用该版本之后的修订来初始化您的Git存储库

我希望这会有所帮助......