在工作中,我们拥有一个庞大的Perforce存储库(大约40,000个更改列表,总存储大小~145GB)。我们对Perforce只有一些温和的抱怨感到满意,但我们计划采用更加分散的开发模式,因此,我们也希望转向更加分散的版本控制系统。
到目前为止,我已经看过通常的嫌疑人(git,mercurial和潜在的市集,因为我对它有很好的经验),但我们目前的主要障碍是将版本历史记录从Perforce中导入并导入到各种DVCS中,以便我们不会失去历史。如果我们不一定要保留它,我们也不希望Perforce服务器闲置 - 我对这种迁移的体验是,一段时间后没有人看过旧的仓库,所以你会失去历史那样。
由于存储库中有多个项目,我们的想法是在导出历史记录时将其拆分为多个DVCS项目,因为并非每个人都需要能够查看历史记录的每个部分。然而,我们最大的项目仍然包含大约2/3的承诺修订版,并且还占用了大约2/3的存储空间。它也拥有最多的分支机构 - 可能大约30个。
到目前为止,我已经尝试了以下内容 - 所有内容都在Windows上,因为我们只是一个仅限Windows的商店:
hg convert
扩展程序导入Mercurial。这似乎对我正在转换的项目的主分支非常有效,但是尝试使用分支图将Perforce分支转换为命名的Mercurial分支仍然会在默认分支上的每个签入时生成平面导入。也许那是因为我设置了分支映射错误,但是hg help convert
表明你只能将Perforce repo变成一个“扁平”结构而没有使用这个导入器的分支,这对我们的使用来说还不够好。 所以,我的问题是:
答案 0 :(得分:5)
如您所知,切换源控制系统是一项巨大的任务,不能掉以轻心。由于 1)进行了实际转换,因此存在相当大的风险和停机时间,而 2)则会再次出现,因为每个人都需要重新设置工具并快速了解新系统。
在您仍在调查您的选项时,我会认真地深吸一口气,然后查看 P4 Sandbox ,看看是否符合您的要求。
有关P4 Sandbox的更多信息如下。
<强>概述强>
- P4Sandbox Feature Demo (Video)
博客帖子
- P4Sandbox Private local branching, distributed development, and more
- P4Sandbox’s First Submit
- Distributed Development and P4Sandbox
- Private Branching with P4Sandbox
- Task-focused Work in P4Sandbox
答案 1 :(得分:4)
我的话,您的存储库大小几乎是200 GB?我为第一个获得git pull
获取存储库副本的傻瓜感到遗憾,并发现他们现在正在下载价值150千兆字节的数据。
我的建议:不要打扰整个历史。您真正需要的只是活动版本和分支。可以把它想象成一个抛弃枯木并重组你的存储库的机会。
我曾经主张尽可能多地获取历史记录,但有一天我不得不将StarTeam存储库转换为ClearCase,而这是无法完成的。 StarTeam中的命令行工具很差,API无法满足我的需求。
我们只是下载了客户拥有的版本,我们正在处理的分支机构以及源代码的几个版本。我们保留了旧的StarTeam服务器,以防万一有人可能需要查看源代码,但没有人这样做。
但是,如果你想要通过这个,那真的不应该那么糟糕。您可以编写Python或Perl脚本来为您进行转换。
Perforce通过编号的变更集跟踪历史记录。是的,每个文件都有自己的版本号,但你真的不太感兴趣,你对更改集更感兴趣。
如果您的P4上次更改集为1,000,则可以将更改集1循环到1,000。 Perforce有时会跳过变更集,但这很容易被发现。每个变更集都有一个日期,进行该提交的人员的姓名以及他们的评论。有了这些信息,您可以将更改推送到Git存储库,并更改该提交的date, author, and comment。
顺便说一下,既然你正在转向Git,我希望你能将你的存储库拆分成单独的存储库。而且,如果您提交了构建对象,请在将它们移动到Git之前将它们从Perforce存储库中删除。您永远不应该在存储库中存储构建的对象 - 特别是如果它们是二进制的。它们占用了大量空间,并且很快就会过时。
答案 2 :(得分:1)
我们(我在perforce工作)构建的产品确实为Perforce软件仓库提供了一个git接口。
http://www.perforce.com/product/components/git-fusion
我在内部使用了一年以上,这很棒,因为您可以使用“实时”Perforce后端尝试新的DVCS方法(您需要多少个回购)。我是唯一使用git的团队成员,而其他人都使用p4或p4v。因此,人们可以使用git工作并逐步确定您的迁移配置。
支持在两个系统之间映射分支: http://www.perforce.com/perforce/doc.current/manuals/git-fusion/index.html#chapter_dyn_ngj_3l.html#section_kkz_gqv_rl
我不确定这是否解决了上述所有系统,因为我确信你只能从git转到X.