使用Git作为Git和SVN回购之间的桥梁?

使用Git作为Git和SVN回购之间的桥梁?,git,svn,git-svn,Git,Svn,Git Svn,问题 我的团队使用git对bitbucket进行源代码控制,我们的客户在内部使用Subversion。我们的团队如何在将代码签入Subversion的同时继续使用git?而且,不,我认为git svn不起作用 要求 我的团队希望使用纯git解决方案,而不是git svn。原因是我们的客户只允许我们在办公室局域网内访问他们的svn环境;在办公室外工作时,我们不能向svn作出承诺 我的方法 我认为我可以使用git svn签出subversion存储库,然后将我们的bitbucket git实例作为远

问题

我的团队使用git对bitbucket进行源代码控制,我们的客户在内部使用Subversion。我们的团队如何在将代码签入Subversion的同时继续使用git?而且,不,我认为git svn不起作用

要求

我的团队希望使用纯git解决方案,而不是git svn。原因是我们的客户只允许我们在办公室局域网内访问他们的svn环境;在办公室外工作时,我们不能向svn作出承诺

我的方法

我认为我可以使用git svn签出subversion存储库,然后将我们的bitbucket git实例作为远程实例添加到相同的git包装的svn存储库中。cron作业可以从我们的bitbucket repo执行
git pull
,然后执行
git svn dcommit
将bitbucket中的更改推送到我们客户的subversion存储库

这是有问题的,因为在pull、svn dcommit过程完成后,git总是会在git bitbucket存储库前面显示“x”个修订数

虽然表面上还没有什么奇怪的事情发生,但在某个时候,我相信我们的客户将开始签入他们的subversion存储库,我最终将不得不推送到我们的bitbucket实例

技术细节

以下是我一直在使用的一系列粗略步骤,以使其正常工作:

git svn clone -s http://svn.my-client.us/my-proj/
cd my-proj
git remote add origin path-to-bitbucket-repo
git fetch origin
git checkout -b develop remotes/develop
git branch --set-upstream develop origin/develop
git pull
#add merge comment here
git svn rebase
git svn dcommit #takes a while to transfer all the individual commits
完成上述操作后,执行
git status

[me@dev myDir]$ git st
# On branch develop
# Your branch is ahead of 'origin/develop' by 59 commits.
#
nothing to commit (working directory clean)
考虑到我需要能够在任何地点办理登机手续,而不仅仅是在办公室,是否有任何策略可以将其作为实现这一点的桥梁


谢谢

您的方法是正确的,但您必须意识到,
dcommit
重写历史的破坏性甚至比正常的
rebase
更大。例如,它在向svn提交数据的每个提交中附加一个
git svn id
行。这就是您的
develope
分支出现在
origin/develope
前面的原因,因为它有59个提交,所有提交都包含消息中的
git svn id
,而这些提交都不在
origin/develope
中。因此,您必须在每次dcommit之后或至少在下一次dcommit之前重新设置git分支的基础。这意味着强制重写上游的历史:

git push -f origin develop
如果任何其他分支机构都是基于这一上游,那么它们现在就必须基于这一上游重新定位

本手册的“注意事项”部分将更详细地介绍,因此您一定要阅读它

您的客户在svn端所做的更改将通过
git svn rebase
自动并入您的开发分支,并最终通过上面的
git push-f
到达bitbucket

如果这种工作流不能让您满意,那么它可能值得一看。我从来没有尝试过,但他们声称在两个SCM之间提供了一个更为有限的集成