4

我正在做一个 Apache 项目。我正在寻求有关如何最好地使用 git 来支持我们稍微不寻常的工作流程的建议。我熟悉主要的 git 命令,但没有在小组项目中使用它的经验。

在我的团队中,我们通常会结对编程,并且出于各种原因,每天会多次交换我们正在开发的开发人员的机器。

中央源代码存储库是 SVN,但存在只读 git 镜像。

我希望我的伙伴和我能够经常从彼此的本地存储库中提取提交,并且(不那么频繁地)从服务器获取更新并提交给它。

如https://www.kernel.org/pub/software/scm/git/docs/git-svn.html所述,这似乎与“git svn”不能很好地配合:

“建议所有 git svn 用户直接从 SVN 服务器 clone、fetch 和 dcommit,避免 git repositories 之间的所有 git clone/pull/merge/push 操作”

使用 git 支持我们的工作流程的最佳方式是什么?例如,如果我们从只读的 git 存储库克隆而不是使用 git svn,并且偶尔通过将补丁应用到单独的“git svn clone”-d 存储库来提交到 svn 存储库,会更容易吗?

感激地收到任何建议。

4

1 回答 1

3

我们在 github.com 上使用主存储库,然后让四个开发人员使用本地克隆。我们还订阅了使用Git Flow来轻松管理我们的分支(开发、主、修补程序、发布、功能等

我们鼓励您阅读成功的 Git 分支模型,使用单个远程 repo 作为您的黄金标准这实际上是 git 中的元思想,没有像 SVN 这样的大师之类的东西)。在非主分支上进行所有开发,仅从单个远程提取(而不是从彼此的本地存储库中提取)。

当然,在开发工作流程中利用 git 的方法有很多种。这对我们的团队非常有效。

那么这在您的环境中会是怎样的呢?

你有一个 svn 存储库(让我们称之为 svn),你只读了它的 git 镜像,让我们称之为roRepo。我们建议将其克隆roRepo到第三个远程仓库,我们称之为flowRepo. 然后 ' git svn clone 'svn存储库到svnRepo.

flowRepo应该是您(dev1)和您的合作伙伴(dev2)以及其他任何人(devN)克隆的地方。因此,您最终会得到dev1Repoand 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 会很昂贵。

这并不是说它不能完成,但随着时间的推移,我们相信它有很大的潜力最终变得更加难以维护。

于 2013-04-05T21:19:49.507 回答