我们在 github.com 上使用主存储库,然后让四个开发人员使用本地克隆。我们还订阅了使用Git Flow来轻松管理我们的分支(开发、主、修补程序、发布、功能等)
我们鼓励您阅读成功的 Git 分支模型,使用单个远程 repo 作为您的黄金标准(这实际上是 git 中的元思想,没有像 SVN 这样的大师之类的东西)。在非主分支上进行所有开发,仅从单个远程提取(而不是从彼此的本地存储库中提取)。
当然,在开发工作流程中利用 git 的方法有很多种。这对我们的团队非常有效。
那么这在您的环境中会是怎样的呢?
你有一个 svn 存储库(让我们称之为 svn
),你只读了它的 git 镜像,让我们称之为roRepo
。我们建议将其克隆roRepo
到第三个远程仓库,我们称之为flowRepo
. 然后 ' git svn clone 'svn
存储库到svnRepo
.
flowRepo
应该是您(dev1)和您的合作伙伴(dev2)以及其他任何人(devN)克隆的地方。因此,您最终会得到dev1Repo
and dev2Repo
。这些开发存储库永远不会相互拉动或推送,它们只会拉/推到flowRepo
.
从那里开始,我们鼓励您接受 gitFlow 模型,不是因为它提供了任何黑魔法,而是因为它提供了一些简单的方法来学习/管理 git 中的开发工作流程(例如使用 dev 分支、使用功能和修补程序分支,发布分支等。它们都只使用 git-flow 为您处理幕后更复杂的 git 命令)。
然后,您和您的伴侣将flowRep
全天定期推/拉。最有可能在 dev 分支上,但如果您在功能分支上共享工作,您可能会在偶尔推/拉那里。
当您(很少,并且通常仅用于发布/修补程序)达到您需要推回 svn 的点时,创建一个补丁(您可能需要一个不错的脚本来为您处理这个,所以它不是手动的)flowRepo
从应用于svnRepo
并最终同步回svn
存储库。
我们的团队这样做了大约一年并取得了成功,直到我们成功地完全摆脱了 SVN 并拥有一个纯 git SCM 解决方案。
为什么不直接克隆svnRepo
并完全跳过flowRepo
?
基本上是因为它与 SVN 相关联,虽然分支和提交在 GIT 中很便宜,但在 SVN 中它们往往要贵得多。
使用git-svn时,最好:
- 尽量减少必须同步回 svn 存储库的分支数量
- 不要指望看到在 git 中完成的分支之间的合并在 svn 中发布:它们不会出现。只有在您对 svn 的 git 分支上进行的提交
`dcommit
才会出现。
这就是问题所在,因为git-flow(一个分支模型)非常擅长创建分支来表示应用程序开发生命周期(功能、修补程序、开发、发布等),而将其同步回 svn 会很昂贵。
这并不是说它不能完成,但随着时间的推移,我们相信它有很大的潜力最终变得更加难以维护。