我们正在从一个项目中的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分支和标记中的历史记录。
答案 0 :(得分:1)
我找到了一种适合我的方式,但它非常“非常规”。所以我不愿意在这里张贴......
我发现对我有用的是在项目移动时编辑.git/config
。我对它移动的修订版git svn fetch -r
进行了编辑,然后编辑了配置。
在我的情况下,项目从trunk / v2移动到branch / v3到trunk / v3,最后一步对我来说是最成问题的。我在配置中翻转了主干和分支,因此从branch / v3到trunk / v3的移动看起来像一个分支。然后我得到了整个历史。
我必须与同一级别的所有其他项目进行相当长的--ignore-paths=""
。
我不认为这种方法可以在其他情况下使用,但如果其他所有方法都失败,那么考虑修改config
可能是一个好主意。