检出是checkout吧?
如果是的话,perforce里面是以文件为单位进行checkout的,而以changelist为单位进行submit。我同意您说得最出彩的地方,也正是为了实现这个地方,submit的时候必须是个原子性提交。
还有个高明的地方是每次提交都是提交对数据库中文件的变更,提交前后数据库的一致性状态就发生了改变。同样的,提交有先后顺序,而这个顺序是通过changelist number的大小维护的。于是就可以通过不同的changlist number访问数据库的不同状态。这也就把changelist具有时间戳的内涵反应出来了。
当然访问数据库中的文件的不同状态,基本上就是查找文件的版本树,每个版本都必然由某个changelist产生,于是既便某个changelist number不存在,或者某个changelist没有修改文件a,a这个文件用这个changelist number访问其状态的时候仍然可以得到某个特定的版本。