我们已经到了 SVN 不支持我们的工作流程的地步。
目前,我们有一个 SVN 主干,开发人员每天至少一次将所有内容提交到我们的中央服务器(具有 RAID 并定期备份)。当开发人员认为该功能已准备就绪时,我们的 SVN 维护人员会将代码合并到稳定分支中,然后定期构建并部署在我们的测试服务器上。我们也有一些特性分支,但它们通常不是问题,因为它们仅在特性开发的最后才重新集成到主干中。
主要问题是后备箱。由于每日提交,它很有可能变得混乱。没有人可以保证在一天结束时每个开发人员都会拥有不会破坏其他开发人员的代码。你可以说 - 如果它不起作用,那么不要提交它,但是如果 PC 或硬盘驱动器出现故障,我们可能会失去一天的工作。我们可以为每个开发人员创建一个单独的分支,但管理和合并这些分支在 SVN 上并不是一个简单的过程,特别是因为一些开发人员是初学者(我们从当地大学招收了一些实习生)。而且有些功能只有一两天的开发时间,所以在 SVN 上创建一个专门的分支是不值得的。
在寻找简化工作流程的工具时,我想起了我使用 TFS 搁置集的经验。它们似乎对于在远程服务器上存储未完成的更改非常有用。但是搁置集不支持版本控制,如果开发人员需要恢复到一些较早的代码,这可能是个问题。迁移到 TFS 对我们来说也不是一个选择,因为我们的服务器是基于 Linux 的,尽管我们的开发人员主要使用 Windows 和 Visual Studio。
然后我开始探索 Git。它看起来真的很强大,而且最近出现了一些 Visual Studio 的扩展。但我对它会如何工作感到有点困惑。似乎 Git 提供了存储库的本地克隆,这很好,但我们仍然需要经常将本地更改推送到中央服务器以避免数据丢失。
我们本质上需要的是,开发人员能够“自动”在他们自己的分支上工作(功能齐全,带有版本控制等),这些分支存储在中央服务器上,以避免在某些开发人员的 PC 出现故障时丢失数据。默认情况下,每个开发人员都有自己的分支(并且他/她应该能够从他/她的“主”分支中分出一个分支以进行一些实验),但不应允许开发人员将其分支中的更改直接推送到 Git 主分支。只有负责维护主分支的人才能从开发者“主”分支中合并功能。
默认情况下是否可以使用 Git 实现这样的工作流,还是我们需要一些额外的工具或设置?Git 能否提供更好的工作流程,从本质上让我们实现相同的目标——最大限度地减少因处理分离的本地副本而导致的数据丢失风险,并最大限度地减少将日常更改推送到我们的中央存储库而导致的混乱?