2010-05-02 146 views
24

我想抛弃SVN GIT中。我现在的SVN仓库设置有下躯干(/trunk/projecta/trunk/projectb等与标签,并在/tags/projecta-1.0树枝等)的项目。我想通过使用git-svn将它们从SVN中提取出来,为每个项目创建不同的Git仓库。转换SVN子目录到Git

我已经成功地拉了整个SVN回购下来到本地的Git回购,但所有的项目,现在在同一个Git的回购存在。在这一点上可以将它们分开吗?

+0

我听说有更好的最长期的选项将颠覆比混帐svn的(因为GIT-SVN是专门为能提交后),不过我还是要说到Git没有任何提及的手。 – 2010-05-02 14:29:20

回答

17

这是棘手。为了得到一个项目的标签,它的所有标签都必须在一个公共目录下,但是你的结构中所有的项目都共享一个标签目录。

也许你可以一次移动/tags/projecta-1.0到/tags/projecta/1.0等,然后将项目导入到git的一个:

git-svn init --trunk=trunk/projecta --tags=tags/projecta ... 

我不知道,如果这将工作不如预期,所以做到这一点你的资料库的副本,而不是原来的!

+1

我并不太在意标签/分支,所以这个工作非常愉快。我在我的Ubuntu Lynx盒子上执行了这个操作: “”“git svn clone --no-metadata --trunk = trunk/projecta http:// svn/repo projecta”“” – magneticMonster 2010-05-02 04:14:50

+0

这很有趣,最简单的方法是创建两个新的git项目,并将ProjectA和ProjectB复制到git repo对应,但这将失去所有历史:( – hugemeow 2012-08-27 01:38:32

1

当存储库布局非常复杂时,有一个名为svn2git的工具,它可以使用规则集转换复杂存储库。

您可以在这里下载:http://gitorious.org/svn2git/ 该程序需要编译,它需要Qt,Apache和SVN头文件。

1

另一个一次性转换Subversion版本库的程序是Svn2Git(与vdboor的答案不同),它具有较少的依赖关系,并且对我的存储库做的很好。

4

我最近不得不用一个相当复杂的案例解决这个问题(从BRL-CAD的总体历史中提取utahrle文件以创建一个单独的GIT项目),最后使用svn2git和规则文件。这些都是我的步骤 - 不知道这是否是“正确”的方式,但它似乎已经成功地在我的情况:

  1. 确保svn2git安装,以及颠覆和Git 如果(启用混帐颠覆支持。不存在)注意 有似乎是使用项目名称 svn2git多个程序 - 我用了一个,这是一个:

    http://www.gitorious.org/svn2git

    这从KDE的文章让我开始:

    http://techbase.kde.org/Projects/MoveToGit/UsingSvn2Git

  2. 获取svn仓库的本地副本。请注意,这 不是结账库的但 整个SVN回购数据集的完整副本。 Sourceforge通过rsync选项使 成为可能 - 详情请参阅他们的文档:http://sourceforge.net/p/forge/documentation/rsync%20Backups/。我不是 其他网站肯定。

    mkdir svn_repo 
    cd svn_repo 
    rsync -av svn.code.sf.net::p/PROJECTNAME/MOUNTPOINT . 
    cd .. 
    
  3. 创建SVN提交者和git提交者之间的标识映射

    文件:帐户地图

    svnname1 Jane Coder <[email protected]> 
    svnname2 Joe Techwriter <[email protected]> 
    
  4. 创建svn2git过滤规则来捕捉utahrle历史。 我会在这里发布全utahrle例子,说明如何 遵循历史的不同目录之间的身边,但 我希望大多数情况下不会是相当这个坏:

    文件:规则

    create repository utahrle 
    end repository 
    
    match /brlcad/trunk/libutahrle/ 
        min revision 1 
        max revision 22796 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/tools/ 
        min revision 1 
        max revision 22814 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/src/other/libutahrle/ 
        min revision 22797 
        repository utahrle 
        branch master 
    end match 
    
    match /brlcad/trunk/src/other/URToolkit/ 
        min revision 22815 
        repository utahrle 
        branch master 
    end match 
    
    match/
    end match 
    
  5. 运行svn-所有快速出口产生归档(svn_repo是抱着 你颠覆文件的完整副本的目录):

    SVN-所有高速出口--identity地图帐户地图 - 规则svn_repo

  6. 使用上述规则文件,utahrle持有由此产生的git 存储库。使用gitk检查我们期望看到的历史记录 实际上是否存在,然后(如果您使用此回购作为在线存档) 用于上传现有git存储库。