将SVN repo迁移到不同的结构化git存储库

时间:2014-04-02 16:13:01

标签: git svn migration

我的项目目前正从svn切换到git repository。

AS_IS (SVN):

parent-module
    |_module_X
    |     |_trunk
    |     |_branches
    |_module_Y
    |     |_trunk
    |     |_branches
    |_module_Z
    |     |_trunk
    |     |_branches
    |_module_K
         |_trunk
         |_branches

我想将svn迁移到git存储库,获取以下结构,仍保留历史记录:

TO_BE (GIT):

 parent-module_A
    |_master
        |_module_X
        |_module_Y   
    |_branches
        |_module_X
        |_module_Y

 parent-module_B
    |_master
        |_module_z
        |_module_K   
    |_branches
        |_module_Z
        |_module_K

有关最佳方法的任何想法吗?

1 个答案:

答案 0 :(得分:1)

我在这里找到了一个解决方案: http://bpeirce.me/moving-one-git-repository-into-another.html

我使用git svn迁移每个项目module_X,module_Y(只有主干),如下所述:http://john.albin.net/git/convert-subversion-to-git

然后

我在服务器上创建一个裸项目git

git init --bare parent-module_A

所以情况是:

  • 父 - module_A.git
  • module_X.git
  • module_Y.git

然后我在我的机器上克隆了项目

git clone http://host/parent-module_A mainproj

git clone module_X.git subproj_tmp
cd subproj_tmp/
git filter-branch -f --prune-empty --tree-filter 'mkdir -p .sub; mv * .sub; mv .sub module_X ' -- --all

git gc --aggressive

cd ../mainproj
git remote add module_X ../subproj_tmp
git fetch module_X
git merge module_X/master

git remote rm subproj
git gc --aggressive
git push origin master

我重复了Module_Y的程序。