perforce 提交是原子的。
这意味着如果更改列表包含 3 个要 checkin 的文件, 并且操作成功检查了前 2 个文件,但随后出现错误 当对第三个文件进行操作时,它能够回滚前两个文件的操作,以便一切都回到原来的状态。
我对此感到敬畏和印象深刻,并试图寻找它的实际工作原理,但似乎找不到它。
如果有人能帮助我了解所有这些在后台如何工作的技术细节,我将不胜感激。
提前非常感谢您。
最佳答案
Perforce 使用数据库作为其事实来源的事实使这变得非常简单:
- 仓库文件被锁定(在数据库中,就像您运行
p4 lock
一样)。 - 新的修订内容已上传到仓库存档。
- 数据库表被锁定,以进行最后一组检查以确保一切正常。
- 新的修订记录写入数据库并释放所有锁定。
如果提交在第 2 部分中的某个地方失败,则不需要回滚任何内容,因为新的修订内容不会覆盖任何内容,并且在第 4 步之前它们不会作为文件历史记录的一部分可见。(不幸的一面这样做的影响是,Perforce 实际上可以在提交失败时“泄漏”磁盘空间,但这与预期的磁盘使用量随时间正常增加相比通常很小。)
如果您希望能够实时观察这种情况的发生,跟踪日志 (P4JOURNAL
) 将向您显示发生时的数据库写入情况,并跟踪日志 ( P4LOG
)将向您显示提交操作的各个阶段,从用户启动操作到完全提交更改。
关于submit - 强制提交原子操作实际上是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377522/