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

Hol*_*olf 5 svn git 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 => Local Work Master.
  • 从Local Work Master推送=> BitBucket Master.
  • 在家里,从BitBucket Master => Local Home Master拉出来.
  • 在家编码,分支,合并,享受git.
  • 从当地家庭分支合并=>本地家庭主人.
  • 从Local Home Master推送=> BitBucket Master.
  • 在工作中,从BitBucket Master拉到Local Work Master.
  • 重新启动SVN Trunk.
  • 向SVN致敬.

好的,有几个步骤,但它适合我.但是,我的一些同事想要开始做同样的事情.更重要的是,我们希望能够在没有阻碍SVN的情况下使用我们的BitBucket Git仓库.

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

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

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

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

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

Dmi*_*nko 3

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

$ subgit install path/to/svn/repository
Run Code Online (Sandbox Code Playgroud)

之后创建存储库的 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->SVN 转换时不会保留 Git 提交中的日期...

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