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

时间:2014-11-12 11:06:10

标签: git svn version-control git-svn

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

我在git / svn中表现不佳,我只是一个普通用户,使用SourceTree和CornerStone或Tortoise,使用漂亮的用户界面进行提交,分支和标记。我之前使用git-svn将svn repo迁移到git中,但反之亦然。反之亦然。

有可能吗?我已经搜索了几个教程但没有一个可以工作。我对rebasereflog等术语也不太满意,如果有一些很好的指导来完成简单的事情而不需要通过更复杂的东西学习,我将非常感激git / svn的一部分。 (简单,因为我猜必须有人面对同样的问题并且之前做过)

提前致谢!

1 个答案:

答案 0 :(得分:7)

嗯,实际上很简单..首先你需要通过git克隆你的svn,然后将git repo添加为另一个遥控器。这将为您提供两个单独的HEAD,这就是为什么您需要{gid-jvn提交到git-svn头部的git-rebase。可能存在冲突,因为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