0

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

现在,我们想要移动的 svn 存储库之一,具有我们想要保留的相当长的历史。所以我尝试在它上面做 git-svn clone,效果很好。

但是,svn 存储库在其历史上已经移动了 3 次。

整个 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 clone 时,我们只获得自上次从 2 移动到 3 以来的历史记录。如果我们检查 svn 中的日志,我们可以正确看到整个历史记录。

我能做些什么来获取整个历史吗?那里有大约 3 年的失传历史,如果可以的话,我们宁愿保留它。

更新:我现在尝试在整个 repo 上做 git-svn clone,从repo_root. 我想我可以这样做,然后使用Detach (move) 子目录中的说明将生成的 git repo 修剪到单独的 Git 存储库中,它似乎运行良好。(至少修剪位)

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

在一个理想的世界中,我最终会得到一个仅包含 projA 的 repo,其中包含 projA_v1 和 v2 的历史,以及 projA 分支和标签中的历史。

4

1 回答 1

1

我找到了一种对我有用的方法,但是它非常“不通用”,所以我很犹豫是否将其发布在这里...

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

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

我不得不对--ignore-paths=""所有其他处于同一水平的项目做相当长的时间。

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

于 2013-04-23T18:29:34.157 回答