当前位置: 首页 > 软件库 > 开发工具 > Git开源工具 >

P4 Fusion

Perforce 到 Git 转换工具
授权协议 BSD 3-Clause
开发语言 C/C++
所属分类 开发工具、 Git开源工具
软件类型 开源软件
地区 不详
投 递 者 王杰
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

P4 Fusion 是一个使用 Perforce Helix Core C++ API 和 Libgit2 用 C++ 编写的快速 Perforce 到 Git 的转换工具,试图缓解git-p4.py的性能瓶颈。

这个项目是作为一个内部项目的概念验证开始的,它需要将P4仓库转换为Git仓库。Git内部也有一个类似的解决方案,叫做git-p4.py。然而,它在处理任何超过1GB大小的仓库时有性能问题,而且它使用Python2在单线程中运行,这给git-p4.py在更大的使用场景中的使用增加了一系列限制。

该工具通过以下方式解决了 git-p4.py 中一些最有影响的扩展和性能限制:

  • 使用Helix Core C++ API来处理下载 CL,从而更好地控制内存以及如何将其提交到 Git 存储库,而无需进行不必要的内存复制和文件 I/O。
  • 使用libgit2将从 Perforce 服务器接收到的文件内容按原样转发到 Git 存储库,同时尽可能避免内存复制。该库允许从内存中简单存在的文件内容创建提交。
  • 使用在 C++11 中实现的自定义基于唤醒的线程池,该线程池运行 Helix Core C++ API 的线程本地库上下文,以对变更列表下载过程进行大量多线程处理。

值得注意的是,P4 Fusion 的速度快到足以在你的Perforce服务器上瞬间产生巨大的负载(如果以中等数量的线程运行,在几分钟内超过15万个请求)。因此,它需要仔细监测以确保Perforce服务器不受影响。这个工具将继续产生负载,没有任何速率限制(除了这个工具提供的运行时选项外),直到转换过程完成。然而,没有速率限制,用几百个网络线程(如果可能的话,甚至更多)来运行这个工具,是在转换过程中实现最大速度的理想情况。

网络线程的数量应设置为一般多于逻辑CPU的数量,因为最耗时的步骤是下载CL数据,这主要是网络I/O的限制。

官方研究表明,这个工具的运行速度比 git-p4.py 快 100 倍以上。在一个包含约3393个中等规模变更列表的仓库路径内,使用 200 个并行连接进行历史转换的平均时间为 26 秒,而 git-p4.py 转换同一仓库路径需要接近 42 分钟。如果Perforce服务器有完整的文件缓存,那么这些转换时间可能是可重复的,否则如果文件缓存是空的,那么前几次运行预计会花费更多时间。

对于更大的仓库(数百万个 CL 或更多),这些执行时间预计会按预期扩展。该工具提供了在转换过程中控制内存利用率的选项,因此这些选项将有助于更大的用例。

❯ ./build/p4-fusion/p4-fusion
[ PRINT @ Main:24 ] Running p4-fusion from: ./build/p4-fusion/p4-fusion
[ PRINT @ Main:43 ] Usage:
[Required] --port
        Specify which P4PORT to use.

[Required] --path
        P4 depot path to convert to a Git repo

[Required] --lookAhead
        How many CLs in the future, at most, shall we keep downloaded by the time it is to commit them?

[Required] --src
        Local relative source path with P4 code. Git repo will be created at this path. This path should be empty before running p4-fusion.

[Required] --client
        Name/path of the client workspace specification.

[Required] --user
        Specify which P4USER to use. Please ensure that the user is logged in.

[Optional, Default is false] --includeBinaries
        Do not discard binary files while downloading changelists.

[Optional, Default is false] --fsyncEnable
        Enable fsync() while writing objects to disk to ensure they get written to permanent storage immediately instead of being cached. This is to mitigate data loss in events of hardware failure.

[Optional, Default is 10] --retries
        Specify how many times a command should be retried before the process exits in a failure.

[Optional, Default is 16] --networkThreads
        Specify the number of threads in the threadpool for running network calls. Defaults to the number of logical CPUs.

[Optional, Default is -1] --maxChanges
        Specify the max number of changelists which should be processed in a single run. -1 signifies unlimited range.

[Optional, Default is 1] --printBatch
        Specify the p4 print batch size.

[Optional, Default is 100] --refresh
        Specify how many times a connection should be reused before it is refreshed.
  • ��该教程包含大量的原创首发改进方式, 所有文章都是原创首发改进内容�� 降低改进难度,改进点包含最新最全的Backbone部分、Neck部分、Head部分、注意力机制部分、自注意力机制部分等完整教程�� ��本篇文章基于 基于 YOLOv7、YOLOv7-tiny、YOLOv5 等网络结合 ASFF 自适应空间特征融合结构,提高特征尺度不变性 改进。代码直接运行�� 重点:有不少读者已经反映该专

  • P4M 自我介绍 我今天11岁,跳级生,上初二,第一次在CSDN上写博客。 P4M介绍 本程序早期版本使用Java编写,后期使用Qt 5.6编写,可以练习算数,目前最新版本3.2 此程序有很多版本,下面介绍各个版本以及更新日志。 1.0 P4M的第一个版本,下文的基础 只有一点功能,大量的BUG 语言:Java 编写方式:纯代码 运行需要:JRE 文件:仅程序 2.0 增加除法 使用最新版Java

  • Fusion Application(FA)补丁管理工具简介。 Fapmgr是FA的补丁管理器。 调用命令如下:   (UNIX) FA_ORACLE_HOME/lcm/ad/bin/fapmgr.shcommand [-options] (Windows) FA_ORACLE_HOME\lcm\ad\bin\fapmgr.cmdcommand [-options] Command 选项如下: C

  • 网上找不到免费,普通下载一直失败,最后感谢帮忙下载,在此分享各位: 链接: https://pan.baidu.com/s/11BAq2QLtiOGRo9IQV282BQ 提取码: p4js

 相关资料
  • Git 对象是不可改变的,但它提供一种有趣的方式来用其他对象假装替换数据库中的 Git 对象。 replace 命令可以让你在 Git 中指定一个对象并可以声称“每次你遇到这个 Git 对象时,假装它是其他的东西”。 在你用一个不同的提交替换历史中的一个提交时,这会非常有用。 例如,你有一个大型的代码历史并想把自己的仓库分成一个短的历史和一个更大更长久的历史,短历史供新的开发者使用,后者给喜欢数据

  • 一、简介 京东小程序转换器,是京东官方团队提供的一款真正实现小程序一键转换的工具,帮助开发者提升开发效率,无需再为维护多套代码仓库而烦恼,让京东小程序的开发流程变得轻松而愉悦。 工具特性如下: 一键转换,可视化操作,简单易用 配备详细的文档操作说明,简单易学 转换过程搭配丰富的日志输出,直观明了 满足绝大多数转换工作需要,性能优越 二、使用说明 1、打开待转化小程序: 点击左侧栏“打开”,打开一个

  • 等高线生成        在“工具”菜单栏中点击等高线生成,弹出对话框如下。        加载要生成等高线的地形高程数据,设置导出的文件位置(最后生成为.shp文件),根据已有的地形高程数据进行设置合适的等高线间距(间距大于地形高程则无法生成),点击生成等高线。        点击查看等高线点击查看等高线如图,可以导入可加载shp格式的软件中查看。如果需要预览一片区域的等高线效果,请使用“等高线

  • 本文向大家介绍使用Atlassian转换实用程序从SVN迁移到Git,包括了使用Atlassian转换实用程序从SVN迁移到Git的使用技巧和注意事项,需要的朋友参考一下 示例 在此处下载Atlassian转换实用程序。该实用程序需要Java,因此请确保在计划进行转换的计算机上安装了Java Runtime Environment JRE。 使用命令java -jar svn-migration-

  • 介绍 此工具主要针对类似于\\u4e2d\\u6587这类Unicode字符做一些特殊转换。 使用 字符串转Unicode符 //第二个参数true表示跳过ASCII字符(只跳过可见字符) String s = UnicodeUtil.toUnicode("aaa123中文", true); //结果aaa123\\u4e2d\\u6587 Unicode转字符串 String str = "a

  • 痛点 在Java开发中我们要面对各种各样的类型转换问题,尤其是从命令行获取的用户参数、从HttpRequest获取的Parameter等等,这些参数类型多种多样,我们怎么去转换他们呢?常用的办法是先整成String,然后调用XXX.parseXXX方法,还要承受转换失败的风险,不得不加一层try catch,这个小小的过程混迹在业务代码中会显得非常难看和臃肿。 Convert类 Convert类可

  • 汉字拼音转换工具,可以用于汉字注音、排序、检索。 注:这个版本同时支持在 Node 和 Web 浏览器环境运行,Python 版请关注 mozillazg/python-pinyin 特性 根据词组智能匹配最正确的拼音。 支持多音字。 简单的繁体支持。 支持多种不同拼音风格。 安装 via npm: npm install pinyin 用法 开发者: var pinyin = require("

  • 问题内容: 在代码的某一时刻,我从地图创建了一个。现在,我想重新创建相同的地图表单,所以我想将其转换为。Java是否有执行此操作的本地调用,还是我必须遍历set元素并手动构建映射? 问题答案: Java中没有内置API可在和之间直接转换,您需要遍历set和使用fill in map。 一种方法: 尽管这里的目的是什么,但是如果您进行任何更改,也将反映为by 所返回的set by backup 。见