1

我们已经到了 SVN 不支持我们的工作流程的地步。

目前,我们有一个 SVN 主干,开发人员每天至少一次将所有内容提交到我们的中央服务器(具有 RAID 并定期备份)。当开发人员认为该功能已准备就绪时,我们的 SVN 维护人员会将代码合并到稳定分支中,然后定期构建并部署在我们的测试服务器上。我们也有一些特性分支,但它们通常不是问题,因为它们仅在特性开发的最后才重新集成到主干中。

主要问题是后备箱。由于每日提交,它很有可能变得混乱。没有人可以保证在一天结束时每个开发人员都会拥有不会破坏其他开发人员的代码。你可以说 - 如果它不起作用,那么不要提交它,但是如果 PC 或硬盘驱动器出现故障,我们可能会失去一天的工作。我们可以为每个开发人员创建一个单独的分支,但管理和合并这些分支在 SVN 上并不是一个简单的过程,特别是因为一些开发人员是初学者(我们从当地大学招收了一些实习生)。而且有些功能只有一两天的开发时间,所以在 SVN 上创建一个专门的分支是不值得的。

在寻找简化工作流程的工具时,我想起了我使用 TFS 搁置集的经验。它们似乎对于在远程服务器上存储未完成的更改非常有用。但是搁置集不支持版本控制,如果开发人员需要恢复到一些较早的代码,这可能是个问题。迁移到 TFS 对我们来说也不是一个选择,因为我们的服务器是基于 Linux 的,尽管我们的开发人员主要使用 Windows 和 Visual Studio。

然后我开始探索 Git。它看起来真的很强大,而且最近出现了一些 Visual Studio 的扩展。但我对它会如何工作感到有点困惑。似乎 Git 提供了存储库的本地克隆,这很好,但我们仍然需要经常将本地更改推送到中央服务器以避免数据丢失。

我们本质上需要的是,开发人员能够“自动”在他们自己的分支上工作(功能齐全,带有版本控制等),这些分支存储在中央服务器上,以避免在某些开发人员的 PC 出现故障时丢失数据。默认情况下,每个开发人员都有自己的分支(并且他/她应该能够从他/她的“主”分支中分出一个分支以进行一些实验),但不应允许开发人员将其分支中的更改直接推送到 Git 主分支。只有负责维护主分支的人才能从开发者“主”分支中合并功能。

默认情况下是否可以使用 Git 实现这样的工作流,还是我们需要一些额外的工具或设置?Git 能否提供更好的工作流程,从本质上让我们实现相同的目标——最大限度地减少因处理分离的本地副本而导致的数据丢失风险,并最大限度地减少将日常更改推送到我们的中央存储库而导致的混乱?

4

1 回答 1

4

前言

糟糕的工作流程(以及当前 SCM 的不良使用)是改变 SCM 的坏理由

是的,Git可以(理论上)帮助最大程度地降低数据丢失的风险和混乱的风险

  • 每个开发者都有本地仓库和至少两个远程仓库:个人远程仓库和公共中央仓库
  • 因为每个开发人员都在自己的仓库中工作,所以他不能破坏其他人的工作

但是 Git,由于

  • DVCS 性质
  • 整体复杂性

带来很多额外的头痛:

  • 在“中央”存储库中管理分支的 ACL 是一项艰巨且不明显的任务
  • DVCS 意味着您无法有效管理每个存储库(和信息安全)
  • 普通日常使用Subversion有问题的“初学者”,用Git会比较麻烦
  • Windows 中的 Git 仍然是“表亲”,有一堆特定于平台的问题和问题

恢复

我建议简化你的工作流程,改正(坏的)习惯,并至少在一段时间内继续在 Subversion 中工作。

IE

  • 开始使用“每个任务的分支”工作流程,不要直接提交到主干 - 主干必须(理想情况下)只包含合并集
  • 严格遵循主要的 VCS 规则“经常提交,快速提交” - 每天提交一次巨大的提交是个糟糕的主意。提交必须包含 1) 单个 2) 逻辑独立 3) 可管理的更改块
  • 迁移到 Subversion 1.8 - 这使得开发(迁移为一等公民,改进了合并)和存储库管理(继承属性,RDC)在某些关键方面变得更加容易
于 2013-07-20T16:21:17.097 回答