我正在尝试将Subversion存储库转换为Git。我面临的问题是如何保存完整的完整历史记录。 SVN存储库具有相当复杂的历史,然后git-svn工作,它仅从特定修订开始,忽略所有早期历史。
更多详细信息:我想导入一个现在按std-layout http://svn.../projects/myProject/trunk
定位的项目。但是,现在不在SVN中创建trunk
。它最初是作为一些自定义路径创建的,如/my_project
,然后在SVN中重命名为myProject/trunk
,然后再移动几次并重命名,最后以标准布局结束。
因此,如果我只是导入指向我需要的SVN项目文件夹的repo,git-svn
结果将从引入标准布局的修订版开始历史记录,而忽略了{{1之前已多次在存储库中移动过。
从技术上讲,我需要导入SVN文件夹的历史记录,如果它从同一存储库的某个其他位置(主干外)移动/复制到主干中。
有没有人有任何想法如何从这样的存储库中恢复历史记录?也许以某种方式使用多个导入,然后git移植,或其他一些魔术?有什么简单的方法吗?
答案 0 :(得分:0)
reposurgeon可以处理这个问题。请参阅其man page,尤其是“Working with Subversion”部分。
从文档中看,branchify
option应该包含您的中继所在的路径列表:
以下是用于将Subversion存储库中的子目录映射到分支的规则:
- 在任何给定时间,都有一组符合条件的路径和路径通配符,用于声明潜在的分支。请参阅
醇>branchify
选项的文档,了解如何更改此集合,该集合最初包含{trunk,tags / *,branches / *和'*'}。...
- 如果branchify集的元素以*结尾,则它的每个直接子目录都被视为潜在分支。如果'*'在branchify集中(默认情况下为true),除/ trunk,/ tags和/ branches之外的所有顶级目录也被视为潜在分支。
醇>
branchify [路径设置]
在分析Subversion仓库时,指定要作为潜在分支处理的目录列表(如果在创建副本后没有修改,则成为标记)。使用
--nobranch
读取选项时,将忽略此列表。它默认为“标准布局”目录集,以及存储库根目录中的任何无法识别的目录。
branchify
选项的默认值包含*
,这可能已经为您检测到了旧分支。如果不是,您可以尝试将branchify
设置为包含my_project
,myProject/trunk
和trunk
,以及默认路径tags/*
和{{1 }}
在此之后你可能会得到多个Git分支 - 一个用于branches/*
,一个用于my_project
,等等。如果发生这种情况,reposurgeon的unite
or graft
commands可以将它们组合在一起;我不确定。如果这些命令仅适用于存储库而不是分支,则可以创建Git移植并按this answer中所述运行trunk
。