Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SVN子目录转换为Git_Svn_Git_Git Svn - Fatal编程技术网

将SVN子目录转换为Git

将SVN子目录转换为Git,svn,git,git-svn,Svn,Git,Git Svn,我想放弃SVN换Git。我当前的SVN存储库设置在trunk下有项目(/trunk/projecta,/trunk/projectb,等等,标记和分支位于/tags/projecta-1.0,等等)。我想通过使用Git SVN将这些项目从SVN中取出,为每个项目创建不同的Git回购协议 我已经成功地将整个SVN回购协议拉到本地Git回购协议中,但所有项目现在都存在于同一Git回购协议中。在这一点上可以把它们分开吗?这很棘手。例如,要获取项目的标记,其所有标记必须位于一个公共目录下,但您的结构中的

我想放弃SVN换Git。我当前的SVN存储库设置在trunk下有项目(
/trunk/projecta
/trunk/projectb
,等等,标记和分支位于
/tags/projecta-1.0
,等等)。我想通过使用Git SVN将这些项目从SVN中取出,为每个项目创建不同的Git回购协议


我已经成功地将整个SVN回购协议拉到本地Git回购协议中,但所有项目现在都存在于同一Git回购协议中。在这一点上可以把它们分开吗?

这很棘手。例如,要获取项目的标记,其所有标记必须位于一个公共目录下,但您的结构中的所有项目共享一个标记目录

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

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

我不知道这是否会像预期的那样起作用,因此请在存储库的副本上执行此操作,而不是原始版本

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

你可以在这里下载:
该程序需要编译,它需要Qt、Apache和SVN头文件。

另一个用于一次性转换Subversion存储库的程序是(与vdboor的答案不同),它具有较少的依赖性,并且为我的存储库做了大量工作。

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

  • 确保安装了svn2git以及subversion和git (如果尚未提供,请启用git subversion支持。)注意 似乎有多个程序使用项目名称 svn2git-我使用的是这个:

    KDE的这篇文章让我开始:

  • 获取svn存储库的本地副本。请注意 不是存储库的签出,而是存储库的完整副本 整个SVN repo数据集。Sourceforge使这成为可能 使用rsync选项-查看他们的文档了解详细信息:。我不是 确定其他网站

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

    文件:帐户映射

    svnname1 Jane Coder <coder@foo.org>
    svnname2 Joe Techwriter <writer@foo.org>
    
  • 运行svn all fast export以生成归档文件(svn_repo是保存文件的目录 您的subversion文件的完整副本):

    svn所有快速导出--身份映射帐户映射--规则svn_repo

  • 使用上述规则文件,utahrle保存生成的git 使用gitk检查我们希望看到的历史记录 实际上存在,那么(如果您将此回购协议用作在线 源文件归档)使用标准的sourceforge过程 用于上载现有git存储库


  • 我不太关心标记/分支,所以这非常有效。我在我的Ubuntu Lynx盒上执行了这一操作:“git svn克隆--无元数据--trunk=trunk/projecta projecta”“”这是一个相当巧妙的方法,最简单的方法是创建两个新的git项目,并相应地将projecta和ProjectB复制到git repo,但这将丢失所有历史记录:(我听说从长远来看,将Subversion转换为Git比Git svn更好(因为Git svn专门用于提交回),但我没有提到hand。
    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