我对如何在Unity中使用版本控制感到有些困惑,尤其是对于不仅仅是场景的对象(例如场景或预制件)。
最近,当我和我的同事在同一场景的不同部分工作时,我们遇到了一个问题。导致冲突,分支和融合。
最后,无论如何,我的修改被他的修改所覆盖。
我目前看到的唯一方法是我们轮流在同一对象上工作,但这似乎并不方便,特别是因为我们当前正在做的所有工作都在场景中。
人们在这种情况下通常会做什么?
(我们正在使用Mercurial,BitBucket和SourceTree。)
我对如何在Unity中使用版本控制感到有些困惑,尤其是对于不仅仅是场景的对象(例如场景或预制件)。
最近,当我和我的同事在同一场景的不同部分工作时,我们遇到了一个问题。导致冲突,分支和融合。
最后,无论如何,我的修改被他的修改所覆盖。
我目前看到的唯一方法是我们轮流在同一对象上工作,但这似乎并不方便,特别是因为我们当前正在做的所有工作都在场景中。
人们在这种情况下通常会做什么?
(我们正在使用Mercurial,BitBucket和SourceTree。)
Answers:
大多数版本控制系统(VCS)都是为文本设计的。它们通常具有用于比较(diff
)和合并源代码的非常强大且便捷的功能,并且某些工具甚至可以自动合并更改(并在猜测应如何合并更改以及应邀请开发人员在何时进行手动合并)。
能够更好地支持diff
和合并使用这些文件的各个应用程序中的二进制文件。例如,Microsoft Word使比较两个文档成为可能,尽管它远非便捷的合并工具,但总比没有好,并且多次为我节省了时间。不幸的是,合并功能通常在软件产品中受到监督,或者难以实现(您如何可视化diff
3D场景?)
对于二进制文件,VCS几乎没有帮助。他们不仅不能有效地存储连续的更改,而且也不能帮助您合并更改。
两年前,我问了一个关于视频编辑软件中版本控制使用的非常相似的问题。我认为针对我的问题的答案也部分适用于此,唯一(但重要)的区别是我的问题与大文件有关,而在您的情况下,二进制文件可能相对较小。
您发现的方法是“轮流在相同的对象上工作”,是一种很好的方法。如果您无法合并,请不要同时处理相同的内容。如果您在同一间办公室工作,这可能很容易。如果不是这样,大多数版本控制系统(包括您所使用的版本控制系统;这里也将在 BitBucket上下文中进行讨论)都支持locking,即,VCS的用户可以通过系统告诉他,他正在处理给定的文件。现在; 其他用户可以加载文件的最新版本,但不要更改它们。