我有一个一直在努力的现有git存储库。但是最近,我需要将提交推送到svn中(无需包括所有合并,但至少可以使用一个线性master分支来完成)
我的git / svn不太好,我只是使用SourceTree和CornerStone或Tortoise以及不错的UI进行提交,分支和标记的普通用户。我之前使用过git-svn来将svn存储库迁移到git中,但是反之亦然。
是否有可能?我已经浏览了几本教程,但都没有用。我对诸如等等术语也不太满意rebase
,reflog
如果有一些很好的指南来完成简单的事情而无需学习git / svn的更复杂部分,我将不胜感激。(很简单,因为我猜想肯定有人曾经遇到过同样的问题,并且以前做过)
提前致谢!
好吧,这实际上很简单..首先,您需要通过git克隆svn,然后将git repo添加为另一个远程目录。这将为您提供两个单独的HEAD
,这就是为什么您需要将git-rebase
git提交到git-svn头中的原因。尽管svn仅具有线性提交,但可能会有冲突。这就是为什么在最终git svn dcommit
将所有内容推送到svn之前需要各种git命令修复所有这些问题的原因。
这是摘要:
1.创建一个git svn克隆跟踪svn
git svn clone svn://DEST/repo/projectname/trunk dest
现在我们有了一个git repo来跟踪导入操作的目标svn登陆点。
2:跟踪我们要导入的git repo
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
这些是必需的,因为源回购中的分支是来自不同机器上的工作,这些分支被合并在一起以形成“源”开发主干线,并且在没有一些调整的情况下并没有变成一个基础。
总的来说,冲突很小,并不难解决。
4:推高SVN
现在我们已经将所有内容都安排在git-svn之上,这是一个简单的例子:
git svn dcommit
将更改推送到svn中。
资料来源:http://goodliffe.blogspot.sg/2011/08/pushing-git-repository-into-existing.html
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句