2009-02-12 62 views
3

我有一个资料库,其布局是这样的:转换非标准Subversion版本库与git

 
    trunk/ 
     projectA 
     projectB 
    branches/ 
     projectA-1.0 
     projectB-1.0 
    tags/ 
     projectA-1.0.1 
     projectB-1.0.1 

我想将它们转换为Git仓库与躯干分离/了projectA作为顶级目录和所有它是分支作为git分支。

每当我尝试指定git svn initgit svn init -T trunk/projectA -b branches -t tags http://svn.example.com,后续git svn fetch在不同修订版上神秘失败。有时会一直到200,有时会停下来。

我目前的想法是,我应该创建一个git存储库,将整个Subversion存储库镜像为包含每个项目的子目录的单个实体。然后我会使用git-filter-branch将子目录重写到项目的根目录。

但是,我不知道如何让分支行为像我想要使用git-filter-branch和。

此外,它将是理想的创建一个单独的git仓库,为每个项目的“主干”分支不同,在这种情况下,我不会有任何问题。

回答

0

我最终做的是克隆存储库的根目录,并为每个项目复制该新的git repo并重新安排事情。它并不干净或漂亮,但它是遗留代码,我不再需要经常查看。

5

你是否考虑过svn2git为了将你的svn导入到git仓库?

胜于git svn clone因为如果你有这样的代码中的svn:

trunk 
    ... 
    branches 
    1.x 
    2.x 
    tags 
    1.0.0 
    1.0.1 
    1.0.2 
    1.1.0 
    2.0.0 

git-svn将通过提交历史建立一个新的git回购。
将导入所有分支和标签作为远程svn分支,而你真正想要的是git-native本地分支和git标签对象
所以导入此项目后,您将获得:

$ git branch 
    * master 
    $ git branch -a 
    * master 
    1.x 
    2.x 
    tags/1.0.0 
    tags/1.0.1 
    tags/1.0.2 
    tags/1.1.0 
    tags/2.0.0 
    trunk 
    $ git tag -l 
    [ empty ] 

svn2git与您的项目完成后,你会得到这个代替:

$ git branch 
    * master 
    1.x 
    2.x 
    $ git tag -l 
    1.0.0 
    1.0.1 
    1.0.2 
    1.1.0 
    2.0.0 

最后,确保主机的HEAD与svn repo的当前主干相同。

所以在你的情况下,它会给你实际的git分支来应用git-filter-branch

+0

我还没有,这对我来说是新的。我会调查。谢谢! – Otto 2009-02-12 15:29:55