团队如何防止覆盖源文件中的工作?[关闭]


26

在我看来,有一种可能性,例如由多个人同时处理游戏引擎时,如何防止覆盖?

假设开发者一在工作,Audio.cpp开发者二也在工作Audio.cpp,这在大型团队中通常如何进行管理以应对覆盖?(换句话说,要阻止开发人员2打开文件,直到开发人员1完成)


84
您选择的标签之一已经是答案。
Philipp 2015年

18
事实上,在4个标签3是一个答案,但一个是答案。
MSalters

Answers:


69

大多数软件开发团队(不仅仅是游戏开发团队)都使用版本控制软件解决此问题。例子是

所有这些工具都有一些差异,但是基本工作流程通常是这样的:该项目有一个具有完整代码库的中央存储库。当开发人员想要加入项目时,他们将执行“签出”。版本控制软件将代码库复制到其本地计算机上。该软件会记住代码库的当前版本(“修订”)。当开发人员进行更改并希望将其放入主存储库时,他们将执行“提交”。他们的更改将上传到中央存储库,并创建一个新的修订号。

当另一个开发人员现在想要提交更改,但是他们签出的修订不再是最新修订时,版本控制系统将不允许它们。开发人员首先需要“拉”同时发生的修订。这会将其本地副本更新为中央存储库上的最新版本。发生冲突时(中间修订也更改了它们的文件),该软件可能会要求他们通过手动编辑冲突文件(“合并”)来解决冲突,以防无法自动执行。完成这些操作后,他们可以将更改作为新修订提交。


18
请注意,Git和Mercurial是分布式版本控制系统,它们的工作方式略有不同:它们不需要单个中央存储库,但从理论上讲,允许任何开发人员直接从其他任何人获取更新。当然,在实践中,将一个存储库(通常位于像GitHub这样的公共主机上)声明为“正式”存储库,并在非分布式版本控制系统中使用中央存储库,或多或少地使用它仍然很普遍。
Ilmari Karonen 2015年

18
此答案还暗示合并始终是手动完成的。但是大多数时候,版本控制软件可以自动合并差异,只需要手动操作就可以完成棘手的更改。
2015年

伙计们,请避免在评论中进行更多讨论。这不是讨论论坛。如果要使用游戏开发聊天室。我清理了几个切线注释线程。
2015年

同样,理想情况下,每个团队成员几乎都专门负责特定的模块,并且只有在极少数情况下,一个以上的人才能在短时间内修改同一源文件,因为此工作流程将合并冲突更改的需求降至最低。但这并非总是如此。
Nicolas Miari 2015年

13

开发人员不会使用相同的文件。

每个开发人员都有自己的文件版本,他们使用特殊的软件来管理其工作。如果他们都进行了更改,则试图覆盖另一个开发人员所做的更改的将遇到必须解决的冲突,否则我谈论的软件就会开始抱怨。换句话说,引起冲突的开发人员需要将其工作与其他开发人员的工作结合起来,然后才可以“保存”文件。

这是对原本不是那么简单的版本控制概念的一部分的简单解释。


6
他们也做这种称为通讯的新颖事物,并且软件不是凭空编写的。因此,如果他们不了解冲突,则可以与对方交谈或事先进行协调。
布赖恩2015年

9

除了关于版本控制和与合并的冲突处理的其他答案中提出的要点外,团队成员还可以通过至少两种其他方式来避免覆盖彼此的工作:

  • 一些版本控制系统(例如SVN)允许锁定文件。这意味着一个团队成员可以在一段时间内获得文件的专有所有权,从而防止其他团队成员进行冲突的编辑(或实际上是任何编辑),直到随后解锁该文件为止。

    但是,由于它可能引起许多问题,因此通常不经常使用。它会降低生产率(通过限制谁可以在任何特定时间处理文件),并且如果有人忘记解锁文件,可能会导致问题。另外,至少对于SVN(我不确定其他VCS),锁定文件并不能阻止其他人对其工作副本进行更改,而只能阻止他们提交更改-如果开发人员这样做会浪费很多精力。修改文件只是为了发现他们由于锁定而无法提交更改。

  • 团队可以尝试以一种这样的方式将任务分配给开发人员:在给定的时间里,只有一个人处理任何特定的文件。例如,开发人员可以各自负责项目的特定部分(例如3D渲染,网络,音频等)-如果代码库已很好地模块化,则分配给网络代码的开发人员应该几乎不需要触摸文件处理音频。

    当然,总会有一些重叠,必须以其他方式进行管理。


2
从好的方面来说,锁定是您编辑.JPEG或其他非纯文本文件的唯一方法。这不是理论上的限制,只是合并工具通常很烂。
MSalters

2
@MSalters并不是说工具很烂,只是大多数合并工具是为文本而不是二进制数据创建的。如果两个更改修改了文件中的同一像素,您将如何解决冲突?甚至更糟的是,您如何考虑JPEG压缩引起的变化?这是一个非常复杂的问题,甚至可能没有一个好的解决方案,因此大多数合并工具不支持的原因是因为对此的需求非常少且功能难以实现。
莫里西(Maurycy)2015年

3
@MaurycyZarzycki:更改相同的字母类似于更改相同的像素:需要手动解析。我现在意识到,.JPEG可能是一个不好的例子,因为艺术家无法处理有损格式。但是,.PNG也存在合并问题。至少,如果合并工具能够合并XML而不会破坏它,您将不胜感激。
MSalters 2015年

@MSalters当然,我可以同意更多。
Maurycy 2015年

1
@xorsyst:以这种方式尝试:在两个位置从SVN中检出。然后从位置1锁定文件。位置2在提交或更新之前不会知道它已被锁定。
Zan Lynx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.