[英]How to push a git repo to an existing SVN repo while maintaining history?
[英]Push existing Git repo to a folder in svn
我有一个现有的git存储库,我一直在努力。 但是最近,我需要将提交推送到svn(不需要包含所有合并,但至少有一个线性主分支可以)
我不是很擅长git / svn,我只是一个普通的用户,使用SourceTree和CornerStone或者Tortoise,有很好的用户界面来做我的提交,分支和标记。 我之前使用git-svn将svn repo迁移到git中,但从来没有反之亦然。
可能吗? 我已经通过几个教程搜索,但没有一个工作。 我也不太喜欢rebase
, reflog
等术语,如果有一些很好的指导来完成简单的事情而不需要通过git / svn更复杂的部分来学习,我将非常感激。 (简单,因为我猜必须有人面对同样的问题并且之前做过)
提前致谢!
好吧,它实际上很简单..首先你需要通过git克隆你的svn,然后将git repo添加为另一个遥控器。 这将给你两个单独的HEAD
,这就是为什么你需要git-rebase
你的git提交到git-svn头。 可能存在冲突,因为svn只有线性提交。 这就是为什么你需要各种git命令来修复所有这些之前你最终git svn dcommit
将所有内容都推送到svn。
以下是摘要:
1.创建一个git svn clone tracking svn
git svn clone svn://DEST/repo/projectname/trunk dest
现在我们有一个git repo跟踪导入操作的目标svn登陆点。
2:跟踪我们要导入的git仓库
cd dest
git remote add -f source /path/to/git/source/repo
现在,如果您检查git历史记录,您将看到来自原始git repo的一系列提交,并且与此断开连接,主HEAD加上指向我们克隆的原始(单个)svn提交的git-svn HEAD。
3:将原始git repo重新基于git-svn
这就是秘密魔法的所在。 我似乎有很多方法可以从这里开始。 这是我发现的唯一一个工作。 当然,我尝试了许多失败的方法。 一旦我发现一个有效,我就停止了尝试。 所以如果有更好的方式我会喜欢听,但这似乎运作良好。
git rebase --onto remotes/git-svn --root source/master
在这一点上,我意识到我的git历史不是严格线性的; 我曾经在几台机器上工作过,所以后备箱的历史有点像。
这意味着我所期望的是一个简单的操作(这是你对SVN帽子所期望的),需要一些修改:
(
gvim foo # fix merge conflict
git add foo
git rebase --continue
)
# ... rinse and repeat
这些都是必需的,因为在不同机器上工作的源代码中的分支被合并在一起形成“源”主干开发线,并没有在没有一些调整的情况下变成一个rebase。
总的来说,冲突很小,并不难解决。
4:向上推到svn
现在我们已经安排了git-svn以上的所有内容,这是一个简单的例子:
git svn dcommit
将更改推送到svn。
资料来源: http : //goodliffe.blogspot.sg/2011/08/pushing-git-repository-into-existing.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.