使用Git SVN和具有多个用户的远程Git存储库的工作流程

时间:2012-07-14 12:58:35

标签: git svn workflow git-svn multiple-users

问题摘要:

当我写出来时,我开始意识到有很多细节,所以这里是标题:

  • 在工作环境中使用SVN和Git SVN的许多用户团队的良好工作流程,但是也希望使用远程Git Repo(BitBucket)从工作环境外部访问相同的代码,在办公室外,在彼此之间共享对此代码的更改,然后在回到办公室时安全地重新回到SVN?其他人继续在办公室内部使用Git SVN吗?

在写这篇文章时,我也意识到我要求做的事情真的很复杂,可能根本就不可能......

详细信息:

我与一群使用SVN存储库的人合作。我们中的许多人已经开始使用Git SVN,现在正在收获本地使用Git的好处,随意分支,必要时合并到我们的本地Masters,然后再回到SVN。这很好用(尽管我意识到我们并没有从纯Git解决方案中获得所有好处)。

我最近开始使用私有BitBucket Git存储库作为Master的远程控制器,因此我可以轻松地将代码传输到其他地方或从其他地方传输代码。工作流程如下:

  • 在工作中,来自SVN Trunk的Rebase =>当地工作大师。
  • 从本地工作大师推送=> BitBucket Master。
  • 在家中,从BitBucket Master =>拉出来本地家庭主人。
  • 在家编码,分支,合并,享受git。
  • 从本地分支机构合并=>本地家庭主人。
  • 从Local Home Master推送=> BitBucket Master。
  • 在工作中,从BitBucket Master拉到Local Work Master。
  • 针对SVN Trunk的重新启动。
  • Dcommit to SVN。

好的,有几个步骤,但对我来说效果很好。但是,我的一些同事想要开始做同样的事情。更重要的是,我们希望能够在没有阻碍SVN的情况下使用我们的BitBucket Git仓库。

我们正在考虑的各种事情的一些例子:

  • 如果我们其中一人不在办公室,他们希望能够获得最新的代码。在工作中,我可以从SVN重新推出,然后推送到BitBucket,将最新代码提供给我的同事。
  • 如果我们两个人想要分享一些变化(假设我们中的一方或两方都不在办公室),我们可以在BitBucket上为此创建一个功能分支,每次推送都会根据需要进行推送。
  • 当我们对它感到满意时,我们中的一个人可以将它合并到我们的本地家庭主人中,然后推送到BitBucket Master,准备好在我们重返工作岗位时拉动。
  • 一旦回到工作岗位,我们中的一个人可以将Master从BitBucket拉到我们的本地工作大师那里,然后像往常一样对SVN进行反叛并且dcommit。

但是,假设我们中的一个人已经这样做了,那么团队的其他成员会发生什么呢?如果他们从BitBucket Master中撤出,他们将获得更改。 但是,如果他们从SVN中退出,他们也会得到改变。

如果两者同时会发生什么?这只是一个可能的障碍。我可以想到其他一些步骤,这些都可能会陷入一团糟。

不幸的是,我们的持续集成工作流程与SVN绑定在一起,其他业务也是如此。因此,我们实际上没有选择完全转移到Git。我们也无法从公司外部访问我们的SVN存储库。

2 个答案:

答案 0 :(得分:3)

查看专为那些想要同时使用Git和SVN存储库的人设计的SubGit项目。如果您可以访问SVN服务器,则只需运行

$ subgit install path/to/svn/repository

之后,创建存储库的Git接口。每次推送到Git存储库都会转换为SVN,反之亦然。您只需设置对新创建的Git存储库的访问权限。

一些基于git-svn的SVN< - > Git镜像脚本提出了类似的功能,但与SubGit相比它们有缺点:

  • 并发问题:如果有人同时推送到SVN和Git,存储库历史就会出现分歧(SubGit关心并发);
  • git-svn存储库只允许类似SVN的概念(例如,它不允许有Git子模块---“git svn dcommit”删除本地添加的子模块)
  • git-svn不会将svn:ignore转换为.gitignore
  • git-svn无法正确处理行结尾(即不尊重svn:eol-style)
  • git-svn不会转换匿名Git分支,这些分支中的提交永远不会进入SVN
  • git-svn并不总是将Git合并提交转换为SVN svn:mergeinfo正确更改
  • git-svn dcommit在Git提交时不保留日期,而Git-> SVN翻译 ...

git-svn的优点是可以将Git镜像保存在另一台机器上;但是它具有并发安全性(在同一台机器上是一个在短时间内锁定SVN和Git存储库的条件)。

答案 1 :(得分:1)

将git服务器与svn存储库同步并非易事。如果你想使用两个服务器,一个使用git,另一个使用subversion,你将遇到问题:

  • Subversion不像git那样理解分支。如果你在分支之间的git中做了几个合并,这也可以传递给svn。但是对于颠覆,一切都发生在一个分支中,所以在不丢失信息的情况下反过来是不可能的。
  • 当您提交时,您的更改会被重新定位。这意味着提交获得了新的sha。如果你将更改从subversion合并到git,git会感到困惑。

我尝试了同样的同步(我们也为构建过程绑定了svn),经过一些实验,我发现可靠的工作是使用git服务器,每个人都使用,将更改同步到subversion,以便jenkins或您使用的集成服务器也可以获得最新的更改。实现这一目标的最简单方法是仅在一个方向同步,git - > SVN。这意味着没有人提交svn(git sync进程除外)。

如果此解决方案适合您,我会记录我是如何做到的,并构建了几个脚本来自动完成。你可以找到它in this post