0

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

根/

*项目1/

树干/

标签/

具体分支名称1/

具体分支名称2/

项目2/

树干/

标签/

具体分支名称1/

等等

我可以通过执行将 Project1 放入 git 存储库。但是,trunktagsSpecificBranchName1SpecificBranchName2在我的树结构中。git svn clone -s http://path/to/repo/Root/Project1 --no-follow-parent

如果我删除--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下,但由于某种原因,它们与tagstrunk包含在同一文件路径中。有没有办法克服这个问题?

4

2 回答 2

1

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

git svn clone http://path/to/repo/Root/Project1 --trunk=trunk --tags=tags Project1

也就是说,与您使用的第二个命令几乎相同,但没有 -b 部分。git svn如果没有要求,不会尝试寻找分支。

之后,您可以尝试.git/config按照 manojlds 的建议进行编辑。

编辑:好的,我进行了进一步的测试。我用你的文件夹结构重新创建了一个 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 存储库

我希望这有帮助...

于 2011-05-27T17:32:34.160 回答
1

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

我建议您在 svn 中创建一个分支文件夹,然后将移动分支移入其中。这将防止你在生产线上遭受很多痛苦。

如果由于各种原因无法执行此操作,您可以对 project1 根目录执行 git int,编辑 .git/config 并更改以下分支部分svn-remote

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

(根据相对网址的情况调整上述内容)

然后进行提取。

于 2011-05-27T16:54:10.653 回答