关于分支和复制资源的一个非常基本的问题,由于我们的主要分支的大小,我已经讨论过这样的问题,但抛开它是非常好的,知道这是如何工作的。
考虑分支数十个Gb的问题。 当您创建大量信息的分支时会发生什么?
我正在阅读官方文档here和here,但我仍然对如何为服务器上的每个分支存储文件感到困惑。
在主分支中存在文件A.txt。 在创建分支(Xbranch)并考虑A.txt没有更改时,perforce服务器是否会复制A.txt(一个保留主要更改,另一个保留Xbranch)?
对于大量数据,它变成了一个问题,因为它意味着重复数十个Gb。那么这是如何运作的呢?
答案 0 :(得分:4)
除了布莱恩彭德尔顿的答案(及其中的问题)之外的一些注释
要真正检查您对正在发生的事情的理解,最好尝试使用包含少量文件的测试存储库,并在每次主要操作后创建检查点,然后比较检查点以查看写入的实际数据库行(以及查看服务器维护的存档文件)。这非常快速且易于设置。您会注意到每个分支文件都在db.integed,db.rev,db.revcx和db.revhx中生成记录 - 更不用说db.have中的任何记录。
您还需要了解正在使用的服务器版本,因为行为已逐渐增强。检查" p4的输出帮助删除":
Obliterate知道在&p.44整合时所做的懒惰副本。创建 分支,并且不会删除仍在使用的副本。因为 对此,删除文件并不保证对应 档案中的文件将被删除。
其他一些观点:
答案 1 :(得分:3)
通常,分支文件不创建文件内容的副本;相反,Perforce服务器只是编写一个描述新版本的附加数据库记录,但是共享该文件内容的单个副本。
Perforce将这些称为“懒惰副本”;您可以在此处了解有关他们的更多信息:http://answers.perforce.com/articles/KB_Article/How-to-Identify-a-Lazy-Copy-of-a-File
一个例外是如果使用“+ S”文件类型修饰符,因为在这种情况下,每个分支都有自己的内容副本,因此可以在每个分支上独立地执行+ S语义。