我想将Git存储库( G )导出到SVN存储库( S )。 S 已使用标准布局(branches / tags / trunk)进行初始化, G 具有开发历史记录。我按照Google Open Source Blog中的建议详细说明了导出 G → S 的工作原理。基本上,博客建议 git-svn clone S 进入空目录,获取 G 进入临时目录。分支和 rebase 到“master”,从而成为第二个Git存储库( G')。
我既不想放弃不受源代码控制的文件,也不想放弃原始版本不可用的分支。这就是为什么我不想继续使用 G',而是使用 G 。有没有办法将表示布局提交的新提交提取回 S ?我没有成功将合并 G'加入 G (当然没有共同的祖先)。
答案 0 :(得分:3)
您应该可以使用git merge --strategy=ours
合并 G'和 G ,即忽略祖先并创建使用树的提交G'但似乎有两个提交作为父母。结果会有点难看,因为历史记录将包含每个提交的两个副本,但您应该能够继续无缝地处理 G 。
答案 1 :(得分:2)
我不确定是否有更简单的方法来添加初始提交,但有一种相当简单的方法可以让它看起来好像SVN布局从一开始就存在。
您可以使用git filter-branch
重写历史记录,以便每个文件都存在于SVN“trunk”目录下,从第一次提交开始:
git filter-branch --tree-filter 'mkdir trunk; git ls-files | xargs -I {} mv {} trunk'
如果需要,您可以类似地将文件移动到标记和分支目录,但是如何决定移动哪些文件将完全取决于分支的用途,或者何时需要将标记添加到历史记录中。 / p>