2013-04-18 44 views
0

我们正在从项目中的svn切换到git。已被移动的git-svn克隆回购?

现在我们想要移动的svn回购之一,有很长的历史,我们想保持。 所以我试着做了git-svn clone,它运行良好。

但是,svn回购在其历史上已经移动了三次。

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

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年的历史遗失,如果可以的话,我们宁愿保留它。

更新: 我试图做的整个回购git-svn克隆现在从repo_root。我想我可以做到这一点,然后用Detach (move) subdirectory into separate Git repository中的指示修剪由此产生的git回购,它似乎运作良好。 (修剪位至少)

虽然还存在问题。分支将不会正确行事..我想这是因为git-svn不会将它们识别为分支,因为其中一个分支中的内容不是整个中继的副本,而只是中继的一部分。有任何想法吗?

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

回答

1

我找到了一种方法,对我的工作,但它是非常“非一般”,所以我不愿在这里张贴...

我发现我的工作是编辑.git/config当项目被感动了。我做了git svn fetch -r来修改它的移动,然后编辑配置。

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

我不得不做很长的--ignore-paths=""与所有在同一级别的其他项目。

我不认为这种方法适用于其他情况,但如果所有其他情况都失败,可以考虑修改config