Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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_Git_Svn_Git Svn - Fatal编程技术网

将具有重命名中继历史记录的SVN回购导入Git

将具有重命名中继历史记录的SVN回购导入Git,git,svn,git-svn,Git,Svn,Git Svn,我正在尝试将Subversion存储库转换为Git。我面临的问题是如何保存完整的历史。SVN存储库有非常复杂的历史,然后git SVN工作,它只从特定版本开始,忽略所有早期的历史 更多详细信息:我想导入一个项目,该项目现在按照std布局http://svn.../projects/myProject/trunk。但是,trunk并不像现在那样在SVN中创建。它最初是作为一些自定义路径创建的,比如/my_project,然后在SVN中重命名为myProject/trunk,然后再进行几次移动和重命

我正在尝试将Subversion存储库转换为Git。我面临的问题是如何保存完整的历史。SVN存储库有非常复杂的历史,然后git SVN工作,它只从特定版本开始,忽略所有早期的历史

更多详细信息:我想导入一个项目,该项目现在按照std布局
http://svn.../projects/myProject/trunk
。但是,
trunk
并不像现在那样在SVN中创建。它最初是作为一些自定义路径创建的,比如
/my_project
,然后在SVN中重命名为
myProject/trunk
,然后再进行几次移动和重命名,最终以标准布局结束

因此,如果我只是导入repo作为指向我需要的SVN项目文件夹,那么
git SVN
结果将从引入标准布局的修订版开始历史记录,而忽略了
projects/myProject/trunk
在存储库中多次移动的事实

从技术上讲,如果SVN文件夹是从同一存储库的其他位置(主干外部)移动/复制到主干中,我需要导入它的历史记录

有人知道如何从这样的存储库中恢复历史吗?也许会使用多个导入,然后是git移植,或者其他一些魔法?有什么简单的方法吗?

,它已经成功地转换了一些毛茸茸的旧SVN存储库,可能可以处理这个问题。请参阅其,尤其是“”部分

从文档中可以看出,应该包含主干所在路径的列表:

以下是用于将Subversion存储库中的子目录映射到分支的规则:

  • 在任何给定的时间,都有一组合格的路径和路径通配符,用于声明潜在的分支。请参阅
    branchify
    选项的文档,了解如何更改此集合,该集合最初由{trunk、tags/*、branchs/*和'*')组成
  • 如果branchify集合的元素以*结尾,则它的每个直接子目录都被视为潜在的分支。如果“*”在branchify集中(默认情况下为true),则除/trunk、/tags和/branchs之外的所有顶级目录也被视为潜在的分支
  • branchify[路径设置]

    指定在分析Subversion repo时要作为潜在分支处理的目录列表(如果创建副本后没有修改,则将成为标记)。当使用
    --nobranch
    读取选项时,将忽略此列表。它默认为“标准布局”目录集,以及存储库根目录中任何无法识别的目录

    branchify
    选项的默认值包含
    *
    ,这可能已经为您检测到了旧分支。如果没有,您可以尝试将
    branchify
    设置为除了默认路径
    tags/*
    branchs/*
    之外,还包含
    my_project
    myProject/trunk
    trunk/*


    在此之后,您可能会得到多个Git分支–一个用于
    my_project
    ,一个用于
    trunk
    ,等等。如果发生这种情况,Repo外科医生可能能够将它们组合起来;我不确定。如果这些命令只适用于存储库而不适用于分支,那么您可以创建一个Git移植并运行
    Git filter branch
    ,如中所述。

    是否有不足之处?如果是这样的话,怎么可能?可能是@的复制品可能是我做错了什么,但它对我不起作用。链接答案假设一个项目定义了分支和标记的结构,我的项目的结构改变了好几次。因此,git没有遵循当前布局引入之前的历史。