Skip to content

Perforce

Perforce是一款商业软件,他们定义Perforce为软件配置管理系统。一般简称P4,系统由服务器端,客户端组成,还包括若干中介服务器 (Proxy Server)。客户端会有GUI界面,命令行界面,Web界面。

基于CS架构,有一个中央服务器,其他客户端通过网络来连接。

image-20210603170027599

集中式与分布式模型

Git是分布式的

​ 使用分布式Git模型,开发人员可以将源代码以及完整的版本历史记录下载到他们的计算机上,然后,他们可以在本地进行更改。这样可以使本地提交,比较和合并快速进行。

​ 但是,一组开发人员(每个人都有自己的存储库副本)需要协调变更共享。然后的问题是,谁的存储库是主存储库?您的公司可能也有安全问题,每个开发人员在其计算机上拥有存储库副本的操作都可能难以管理。因此,当今越来越多的团队使用集中化的Git模型,打算成为项目一部分的更改将作为请求或合并请求提交给master分支。这是针对专用的Git服务器,而不是针对某个特定开发人员的工作站。

​ Git权限在存储库(repo)级别分配,因此,对安全性有要求的团队通常将他们的项目分成几个存储库,这样可以确保开发人员只能访问他们需要的存储库,这使审核更加容易。但是,一旦项目分解,团队就需要处理跨存储库的依赖关系。

Perforce是集中式的

​ Helix Core – Perforce的版本控制使用集中式模型。将所有内容存储在一个地方可确保开发人员始终拥有最新版本。开发人员,无论位于何处,都将所有更改提交到中央服务器。拥有一个项目的副本会在整个企业中创建单一的事实来源。这也改善了沟通,因为其他团队成员很容易看到正在进行的工作。而正在进行的Git工作状态仅存储在本地存储库中。

​ 集中式模型使代码协作和代码重用变得更加容易。并且它确保了可审计性和可追溯性。即使Helix Core是集中式的,它也可以通过副本服务器和代理服务器安全地支持远程站点。由于大多数操作都是在本地完成的,因此可以大大提高性能。

性能

Git更快的地方

​ 使用Git可以更快地进行本地提交,比较和合并。但是,许多开发人员Push和Pull会降低性能并降低生产率。

Perforce更快的地方

​ Helix Core专为速度和规模而设计。它每天可以处理数百万个事务,数十亿个文件和PB级的存储。开发人员可以快速,轻松地查看工作站上是否具有文件的最新版本。另外,它使用独占锁定处理大型二进制文件。这样可以防止团队成员的工作互相冲突。

 借助Perforce Federated Architecture,远程团队可以在大型Clone/Pull/Build操作中体验本地速度性能。这可以减少使用传统Git进行的大量WAN等待。

管理大文件/二进制文件

​ 大文件和二进制工件是开发的一部分。它们可能是构建和输入测试的结果。但是对于某些行业,例如游戏开发,它们是您整个过程的组成部分。您需要能够将艺术家和开发人员的作品结合到最终产品中。

Git提供LFS

​ 今天,Git尝试使用Git LFS解决此问题。但是,大多数大型团队将其大型二进制资产存储在Nexus或Artifactory等工件存储库工具中。这意味着您不再拥有单一的数据来源。这些其他工具也使您的构建流程复杂化。

Perforce将所有内容存储在一个存储库中

​ 在Helix Core中,工件与源代码和其他非代码资产一起存储。这些工件可以作为与相关源代码相同的更改列表的一部分检入。将所有内容都放在一台中央服务器中可以简化工作流程。而且您的管理员无需管理其他许可证和集成。

分支策略

​ Git和Perforce均提供轻量级分支,分支方式不同。

git分支

​ 在Git中,创建分支后,您可以立即在本地新分支上开始工作。进行添加和更改后,可以提交到本地副本。但是,合并到master分支的本地副本与将更改推送到中央存储库不同。

 如果在推送更改时多个开发人员正在处理同一个文件,则可能会发生合并冲突。这就是为什么在合并之前从服务器获取最新更改始终很重要的原因。但是,如果您有数百名开发人员在Git中开发项目,那么这可能会很耗时。

​ 而且,如果您有跨存储库的依赖关系,则需要协调各个存储库之间的合并冲突。这可能很棘手。随着您的团队或存储库数量的增加,它变得越来越难。

Perforce分支

​ 在Helix Core中,分支是在文件层次结构级别完成的。您的团队成员可以选择特定的文件进行检出并提交回存储库中。独占签出使开发人员可以了解其他人的工作。有了文件级别的细化权限,管理员可以保护他们最重要的文件。

​ Perforce Streams –我们的分支和合并方式– –简化了工作区的设置并有助于指导团队。开发人员可以轻松地在流(分支)之间切换,并且很容易看到更改是如何传播的。与Git一样,将更改提交到主流/分支时,仍然会发生冲突。这些通常易于管理。Helix Core的优点是可以看到正在进行的工作,并且可以提前通知潜在的合并冲突。

​ 此外,Helix Core的可扩展性使开发人员可以通过一个动作提交可能影响多个组件的潜在大型变更列表。这可以大大减少代码依赖性问题,而且可以轻松地跟踪和管理这些更改。

何时使用Perforce(Helix Core)

当您具备以下条件时,Perforce是正确的版本控制系统:

  • 大型代码库。
  • 非代码资产,例如二进制文件或图形。
  • 代码依赖性,尤其是跨组件。
  • 广泛的代码重用,例如工件。
  • 大型,地理位置各异的团队。

这就是Perforce擅长的地方。这是因为我们的版本控制是为具有大型代码库和复杂开发环境的大型团队设计的。

Reference

https://www.shdsd.com/news-167/index.html/