【问题标题】:Cannot setup Git with Subversion repository using git svn无法使用 git svn 设置带有 Subversion 存储库的 Git
【发布时间】:2011-05-27 16:15:34
【问题描述】:

我正在尝试通过 git svn 将 Git 与 Subversion 一起使用,其中包含多个项目的 Subversion 存储库。项目结构如下:

根/

*项目1/

主干/

标签/

SpecificBranchName1/

SpecificBranchName2/

项目2/

主干/

标签/

SpecificBranchName1/

等等

我可以通过 git svn clone -s @987654321@ --no-follow-parent 将 Project1 放入 git 存储库。然而,trunktagsSpecificBranchName1SpecificBranchName2 在我的树形结构中。

如果我删除 --no-follow-parent 标志,我会收到一条错误消息:“找不到 http://path/to/repo/Root/Project1/SpecificBranchName1 的 revmap”。 我如果我尝试得到相同的消息:git svn clone -T trunk -t tags -b . @987654323@

我真的不需要我的 git repo 中的分支,所以我尝试使用:git svn clone -s --ignore-paths="^SpecificBranchName1" @987654324@ 跳过它,但得到了同样的错误。

据我所知,这个 Subversion 文件结构很奇怪。通常分支位于 ./branches 下,但由于某种原因,它们与 tagstrunk 包含在同一文件路径中。有没有办法解决这个问题?

【问题讨论】:

    标签: svn git git-svn multiple-projects


    【解决方案1】:

    无论如何,你的不是标准结构(当然你自己也说过)那你为什么要使用-s标志?

    我建议你在 svn 中创建一个分支文件夹,然后将移动分支移入其中。这样可以避免你在未来遭受很多痛苦。

    如果由于各种原因你不能这样做,你可以对 project1 根目录做一个 git int,编辑 .git/config 并更改 svn-remote 下的分支部分:

    branches = {SpecificBranchName1,SpecificBranchName2}:refs/remotes/branches/*
    

    (根据相对url的情况调整以上内容)

    然后进行抓取。

    【讨论】:

    • 我希望我能改变结构,但如果我能做到的话,我可能只是将整个 repo 转换为 git 并取消 svn :)
    • 我尝试按照您上面提到的那样编辑 git 配置文件,但我仍然得到 Couldn't find revmap for path/to/Root/Project1/SpecificBranchName1 :P
    【解决方案2】:

    如果您不需要分支,请尝试:

    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 中查找字符串“couldn't find 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 在主干中找到了一个合并点,而合并来自一条 Git 不知道的路径并且由于某种原因它无法到达。

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

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

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

    【讨论】:

    猜你喜欢
    • 2010-09-19
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多