Perforce:文件如何通过分支存储?

时间:2013-05-29 18:13:29

标签: perforce

关于分支和复制资源的一个非常基本的问题,由于我们的主要分支的大小,我已经讨论过这样的问题,但抛开它是非常好的,知道这是如何工作的。

考虑分支数十个Gb的问题。 当您创建大量信息的分支时会发生什么?

我正在阅读官方文档herehere,但我仍然对如何为服务器上的每个分支存储文件感到困惑。

在主分支中存在文件A.txt。 在创建分支(Xbranch)并考虑A.txt没有更改时,perforce服务器是否会复制A.txt(一个保留主要更改,另一个保留Xbranch)?

对于大量数据,它变成了一个问题,因为它意味着重复数十个Gb。那么这是如何运作的呢?

2 个答案:

答案 0 :(得分:4)

除了布莱恩彭德尔顿的答案(及其中的问题)之外的一些注释

要真正检查您对正在发生的事情的理解,最好尝试使用包含少量文件的测试存储库,并在每次主要操作后创建检查点,然后比较检查点以查看写入的实际数据库行(以及查看服务器维护的存档文件)。这非常快速且易于设置。您会注意到每个分支文件都在db.integed,db.rev,db.revcx和db.revhx中生成记录 - 更不用说db.have中的任何记录。

您还需要了解正在使用的服务器版本,因为行为已逐渐增强。检查" p4的输出帮助删除":

  

Obliterate知道在&p.44整合时所做的懒惰副本。创建   分支,并且不会删除仍在使用的副本。因为   对此,删除文件并不保证对应   档案中的文件将被删除。

其他一些观点:

  • " p4的默认标志整合"创建分支将文件复制到客户端工作区,然后使用submit将它们复制回服务器。这需要时间取决于文件的数量和大小。长期以来可以使用-v(虚拟)标志来避免这种情况,该标志只是在服务器上创建适当的行并避免更新客户端工作区 - 通常非常快。可能的轻微缺点是你必须在之后同步这些文件才能使用它们。
  • Perforce的新版本有" p4填充"与"整合-v"相同的命令但实际上并不需要将目标文件映射到当前客户端工作空间 - 这样可以避免客户端视图中的可怕目标文件"很多初学者都在努力解决的错误! [在P4V中,这是"分支文件......"右键菜单上的命令,而不是"合并/整合..."]
  • Streams在很多方面使得分支更加流畅和轻松 - 非常值得阅读和使用(美中不足的唯一可能是平坦的2级命名层次结构,以及使用现有分支迁移现有分支的潜在挑战关系到流)
  • 任务流非常漂亮,并且在服务器上节省了大量空间
  • Obliterate为一些版本提供了一个有趣的标志-b,就像能够快速轻松地删除未更改的分支文件一样 - 就像复古创建任务流一样。可以在具有大量分支的大型安装中潜在地保存数百万个数据库行

答案 1 :(得分:3)

通常,分支文件创建文件内容的副本;相反,Perforce服务器只是编写一个描述新版本的附加数据库记录,但是共享该文件内容的单个副本。

Perforce将这些称为“懒惰副本”;您可以在此处了解有关他们的更多信息:http://answers.perforce.com/articles/KB_Article/How-to-Identify-a-Lazy-Copy-of-a-File

一个例外是如果使用“+ S”文件类型修饰符,因为在这种情况下,每个分支都有自己的内容副本,因此可以在每个分支上独立地执行+ S语义。