在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖?
假设开发者一在工作,Audio.cpp
而开发者二也在工作Audio.cpp
,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖?
假设开发者一在工作,Audio.cpp
而开发者二也在工作Audio.cpp
,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)
Answers:
大多数软件开发团队(不仅仅是游戏开发团队)都使用版本控制软件解决此问题。例子是
所有这些工具都有一些差异,但是基本工作流程通常是这样的:该项目有一个具有完整代码库的中央存储库。当开发人员想要加入项目时,他们将执行“签出”。版本控制软件将代码库复制到其本地计算机上。该软件会记住代码库的当前版本(“修订”)。当开发人员进行更改并希望将其放入主存储库时,他们将执行“提交”。他们的更改将上传到中央存储库,并创建一个新的修订号。
当另一个开发人员现在想要提交更改,但是他们签出的修订不再是最新修订时,版本控制系统将不允许它们。开发人员首先需要“拉”同时发生的修订。这会将其本地副本更新为中央存储库上的最新版本。发生冲突时(中间修订也更改了它们的文件),该软件可能会要求他们通过手动编辑冲突文件(“合并”)来解决冲突,以防无法自动执行。完成这些操作后,他们可以将更改作为新修订提交。
除了关于版本控制和与合并的冲突处理的其他答案中提出的要点外,团队成员还可以通过至少两种其他方式来避免覆盖彼此的工作:
一些版本控制系统(例如SVN)允许锁定文件。这意味着一个团队成员可以在一段时间内获得文件的专有所有权,从而防止其他团队成员进行冲突的编辑(或实际上是任何编辑),直到随后解锁该文件为止。
但是,由于它可能引起许多问题,因此通常不经常使用。它会降低生产率(通过限制谁可以在任何特定时间处理文件),并且如果有人忘记解锁文件,可能会导致问题。另外,至少对于SVN(我不确定其他VCS),锁定文件并不能阻止其他人对其工作副本进行更改,而只能阻止他们提交更改-如果开发人员这样做会浪费很多精力。修改文件只是为了发现他们由于锁定而无法提交更改。
团队可以尝试以一种这样的方式将任务分配给开发人员:在给定的时间里,只有一个人处理任何特定的文件。例如,开发人员可以各自负责项目的特定部分(例如3D渲染,网络,音频等)-如果代码库已很好地模块化,则分配给网络代码的开发人员应该几乎不需要触摸文件处理音频。
当然,总会有一些重叠,必须以其他方式进行管理。