已移动的git-svn克隆回购?

时间:2013-04-18 20:40:46

标签: git git-svn

我们正在从一个项目中的svn切换到git。

现在我们想要移动的svn repos之一,我们想要保留相当长的历史。 所以我已经尝试过对它进行git-svn克隆了,效果很好。

然而,svn repo在其历史上被移动了三次。

整个回购的布局是这样的;

repo_root/
trunk/
    projA_v1 (existed in the beginning)
    projA_v2 (then moved to v2)
    projA_v3 (and finally to v3)
    projB
    projC
branches/
    projA_b1
    projA_b2
    projB_b1
    projC_b1
tags/
    projA_t1
    projB_t1
    projC_t1

该项目最初称为projA_v1,然后移至v2,最后移至v3。

现在当我们进行git-svn克隆时,我们只获取自上一次从2移动到3的历史记录。 如果我们检查svn中的日志,我们会正确地看到整个历史记录。

我能做些什么才能获得整个历史?那里有大约3年的历史遗失,如果可能,我们宁愿保留它。

更新: 我现在尝试从repo_root对整个仓库进行git-svn克隆。我以为我可以做到这一点,然后用Detach (move) subdirectory into separate Git repository中的说明修剪生成的git repo,它似乎运行良好。 (至少修剪一下)

但仍有问题。分支将不会正常运行..我想这是因为git-svn不会将它们识别为分支,因为其中一个分支中的内容不是整个主干的副本,而只是主干的一部分。有任何想法吗?

在一个理想的世界中,我最终会得到一个仅由projA组成的回购,包含projA_v1和v2的历史记录,以及projA分支和标记中的历史记录。

1 个答案:

答案 0 :(得分:1)

我找到了一种适合我的方式,但它非常“非常规”。所以我不愿意在这里张贴......

我发现对我有用的是在项目移动时编辑.git/config。我对它移动的修订版git svn fetch -r进行了编辑,然后编辑了配置。

在我的情况下,项目从trunk / v2移动到branch / v3到trunk / v3,最后一步对我来说是最成问题的。我在配置中翻转了主干和分支,因此从branch / v3到trunk / v3的移动看起来像一个分支。然后我得到了整个历史。

我必须与同一级别的所有其他项目进行相当长的--ignore-paths=""

我不认为这种方法可以在其他情况下使用,但如果其他所有方法都失败,那么考虑修改config可能是一个好主意。