繁体   English   中英

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

[英]Push existing Git repo to a folder in svn

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

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

可能吗? 我已经通过几个教程搜索,但没有一个工作。 我也不太喜欢rebasereflog等术语,如果有一些很好的指导来完成简单的事情而不需要通过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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM