将现有的Git仓库推送到svn中的文件夹

Hak*_*ton 3 svn git version-control git-svn

我有一个现有的git存储库,我一直在努力.但是最近,我需要将提交推送到svn(不需要包含所有合并,但至少有一个线性主分支可以)

我不是很擅长git/svn,我只是一个普通的用户,使用SourceTree和CornerStone或者Tortoise,有很好的用户界面来做我的提交,分支和标记.我之前使用git-svn将svn repo迁移到git中,但从来没有反之亦然.

可能吗?我已经通过几个教程搜索,但没有一个工作.我也没有很好的与喜欢那些术语rebase,reflog等会很感激,如果有一些很好的指导来完成简单的事情,而不需要通过GIT中/ SVN的更复杂的部分学习.(简单,因为我猜必须有人面对同样的问题并且之前做过)

提前致谢!

Zen*_*aro 7

好吧,它实际上很简单..首先你需要通过git克隆你的svn,然后将git repo添加为另一个遥控器.这将给你两个独立的HEAD,这就是为什么你需要git-rebase你的git提交到git-svn头.可能存在冲突,因为svn只有线性提交.这就是为什么在最终git svn dcommit将所有内容都推送到svn 之前需要各种git命令来修复所有这些命令.

以下是摘要:

1.创建一个git svn clone tracking svn

git svn clone svn://DEST/repo/projectname/trunk dest
Run Code Online (Sandbox Code Playgroud)

现在我们有一个git repo跟踪导入操作的目标svn登陆点.

2:跟踪我们要导入的git仓库

cd dest
git remote add -f source /path/to/git/source/repo
Run Code Online (Sandbox Code Playgroud)

现在,如果您检查git历史记录,您将看到来自原始git repo的一系列提交,并且与此断开连接,主HEAD加上指向我们克隆的原始(单个)svn提交的git-svn HEAD.

3:将原始git repo重新基于git-svn

这就是秘密魔法的所在.我似乎有很多方法可以从这里开始.这是我发现的唯一一个工作.当然,我尝试了许多失败的方法.一旦我找到一个有效的,我就停止了尝试.所以如果有更好的方式我会喜欢听到它,但这似乎运作良好.

git rebase --onto remotes/git-svn --root source/master
Run Code Online (Sandbox Code Playgroud)

在这一点上,我意识到我的git历史不是严格线性的; 我曾经在几台机器上工作过,所以后备箱的历史有点像.

这意味着我所期望的是一个简单的操作(这是你对SVN帽子所期望的),需要一些修改:

(
gvim foo # fix merge conflict
git add foo
git rebase --continue
)
# ... rinse and repeat
Run Code Online (Sandbox Code Playgroud)

这些都是必需的,因为在不同机器上工作的源代码中的分支被合并在一起形成"源"主干开发线,并没有在没有一些调整的情况下变成一个rebase.

总的来说,冲突很小,并不难解决.

4:向上推到svn

现在我们已经安排了git-svn以上的所有内容,这是一个简单的例子:

git svn dcommit

将更改推送到svn.

资料来源:http://goodliffe.blogspot.sg/2011/08/pushing-git-repository-into-existing.html