版本控制模型解析与 Subversion 实践
1. 版本控制系统的核心使命与策略
版本控制系统的核心使命是实现数据的协作编辑与共享,但不同系统采用不同策略达成这一目标。理解这些不同策略很重要,一方面有助于对比现有版本控制系统,另一方面能让我们更有效地使用 Subversion,因为它支持多种工作方式。
2. 文件共享问题
所有版本控制系统都要解决一个基本问题:如何让用户共享信息,同时避免他们意外覆盖彼此的修改。在仓库中,用户很容易不小心覆盖他人的更改。例如,同事 Harry 和 Sally 同时编辑同一仓库文件,若 Harry 先保存更改,Sally 随后可能会用自己的新版本意外覆盖 Harry 的更改。虽然 Harry 的版本不会永久丢失,但他的更改不会出现在 Sally 的新版本中,这意味着 Harry 的工作实际上丢失了,这是我们要避免的情况。
3. 锁 - 修改 - 解锁解决方案
许多版本控制系统采用锁 - 修改 - 解锁模型来解决多人编辑冲突问题。在该模型中,仓库一次只允许一人更改文件,通过锁来管理这种排他性。Harry 在修改文件前必须先“锁定”它,若 Harry 锁定了文件,Sally 就无法锁定,只能读取文件并等待 Harry 完成修改并释放锁。Harry 解锁后,Sally 才能锁定并编辑文件。
然而,该模型存在一些问题:
-管理问题:Harry 可能锁定文件后忘记解锁,导致 Sally 无法编辑,若 Harry 去度假,Sally 只能找管理员解锁,造成不必要的延迟和时间浪费。
-不必要的序列化