当前位置:  开发笔记 > 编程语言 > 正文

GIT vs. Perforce-两个VCS将进入...一个人将离开

如何解决《GITvs.Perforce-两个VCS将进入一个人将离开》经验,为你挑选了7个好方法。

所以我正在让GIT在工作中出售.我需要的第一件事就是让每个人相信GIT在他们已经习惯做的事情上做得更好.我们目前使用Perforce.还有其他人经历过类似的销售吗?有什么好的链接/建议吗?

其中一个重大胜利是我们可以与网络断开连接.IMO的另一个胜利是处理添加/结账的方式.欢迎更多积分!我们总共有10-20个开发者.



1> Carl..:

我在工作中使用Perforce.我也使用Git,因为当我处理代码并且无法连接到服务器时,我仍然会喜欢某种形式的版本控制.不,调和离线工作就不一样了.在这里,我发现git是一个很大的好处:

    分支速度 - git最多需要几秒钟.

    冲突 - P4Merge的自动决心摧毁了一周的工作量.从那时起,我宁愿在合并时手工解决.当Git提示我冲突时,实际上是一场冲突.其余的时间,git正确地解决了问题,我节省了大量的时间.

    跟踪合并 - 如果您有一个分支机构不断接收来自其他两个分支机构的合并,您就会知道perforce会让您感到头疼.使用git,头痛最小化,因为git中合并的结果实际上是一个新的提交,它知道它的祖先是谁.

    权限 - 我已经忘记了我尝试处理文件的次数,但由于未在Perforce中检出,因此无法完成.如果您使用XCode(或任何没有可靠的Perforce SCM插件的编辑器)离线工作,您就会知道这有多么令人恼火.我不必为Git担心.我做了我的改变.Git不会阻止我并在后台跟踪它们.

    保持主树整洁 - 使用git,我可以对提交进行排序并整理代码,以便历史记录看起来整洁.这些都没有"检查这个文件,因为它应该是以前签入的垃圾".我压扁这样的提交,因为他们帮助没人.

    存储 - 您的perforce服务器需要是版本2010.1或更高版本才能使用p4 shelve命令.

    创建补丁 - 在git中很容易.不知道在不使用命令行的情况下Perforce是否可行.

    来自GUI的邮件补丁 - 再次,git在这里获胜.

    磁盘空间 - 使用perforce,每个分支都是一个副本.这意味着如果您的源代码树很大,您的磁盘空间就会快速耗尽.一旦开始构建,这甚至不计算额外空间.为什么甚至在分支和磁盘空间之间建立链接?使用git,您可以拥有100个分支,并且一次只存在一个分支.如果您特别想同时处理两个版本,您可以克隆,完成您的工作,然后根据需要删除一个克隆,而不会丢失任何内容.

    如果您使用的是XCode4,那么perforce支持已被删除,现在内置了git支持.如果您像我一样跨平台工作,这很重要.使用Visual Studio,您可以使用git扩展.使用perforce,它同样适用于两种操作系统.嗯,现在可能还有更多关于Mac的XCode4现场.

    找到错误的签入(或者,git bisect规则) - 曾经尝试用perforce进行二进制搜索以找出错误的引入位置?相当麻烦,是吗?当中间的其他分支集成时,更麻烦.为什么?因为这些任务没有自动化.你需要编写自己的工具来与perforce交谈,而你通常没有时间.使用git,您可以给它起点("好"点和"坏"点)并自动搜索.更好的是,如果你有一个可以自动构建和测试过程的脚本,你可以将git挂钩到脚本,并且查找签入的整个过程是自动的.应该是这样的.

    跟踪重构之间的变化 - 尝试将BigClass拆分为SmallClass1和SmallClass2.对于Perforce,BigClass现在已不复存在,并且有两个新类(SmallClass1和SmallClass2已加入源树).对于Perforce,BigClass与SmallClass1和SmallClass2之间没有关系.另一方面,Git非常聪明地知道,BigClass的x%现在在SmallClass1中,而BigClass的y%在SmallClass2中,并且BigClass已不复存在.现在,从正在审查多个分支的变化的人的角度来看,你告诉我你会发现哪种方法更有用--Git或Perforce.就个人而言,我更喜欢Git的方法,因为它更准确地反映了代码的实际变化.Git能够做到这一点,因为它跟踪文件中的内容而不是文件本身.

    集中或分散:Git是一个DVCS系统,而perforce是集中的.集中式VCS以后不能分散,但DVCS(尤其是git)可以集中化.有几种产品可以为git添加非常精细的访问控制,如果这是业务需要的话.就个人而言,我会选择一个能够长期提供更大灵活性的系统.

    分支映射:如果要在Perforce中进行分支,则需要创建分支映射.这是有原因的,但它们与Perforce概念化分支的方式有关.作为开发人员或团队,这仅仅意味着工作流程中的另一个步骤,我根本不认为这是有效的.

    在团队之间共享工作:使用Perforce,您无法分解提交.A队正在开发功能A.团队B的功能B.团队C负责修复错误.现在,团队A和B必须修复一堆错误才能实现他们的功能.唯一的问题是,他们在进行更改时并没有那么严格(可能是因为他们赶到了截止日期),因此他们的"错误修复"是较大提交内容的一部分,其中包含新内容,只要版本控制在他们的分支机构有关.但是,C队现在正在进行积分发布,并希望从其他团队获得错误修复.如果他们使用Git,C队可以挑选其他团队的相关变化,将其拆分并仅采取他们需要的内容而不必担心引入任何部分实现的功能.使用Perforce,Team C可以获取受影响的文件,但必须使用更加手动的过程分离相关更改.

    更改平台 - 如果您将来决定改变您选择的平台,无论出于何种原因,您都会受到Perforce.com的支配以及您所选平台的工具的可用性.

    更改为未来令人惊叹的源代码控制引擎X - 如果您决定更改用于源代码管理的内容,从Perforce中提取源代码控制历史并将其移至新系统X将是一场噩梦,因为它是封闭源代码并且是最好的你可以做的就是猜测 - 只有Google for Perforce to Git migration才能了解我所说的内容.至少Git是它的开源软件,所以它消除了很多猜测.

嗯,这是我的2美分.在Perforce的辩护中,我必须说出他们的客户支持规则以及他们的Time Lapse View工具.我不知道如何用git获得时间推移视图.但为了方便和节省时间,我会随时使用git.


Perforce和Git之间最大的区别在于所需的思维模式.如果您正在运行集中式VCS商店,那么git将是一个非常难以销售的产品,因为它需要改变您,您的团队和业务部门对版本控制的看法.换句话说,git是一种优秀而高效的工具,技术上比Perforce更强大.困难的部分是说服人类:)
#6(藏匿处):p4搁置,这是新的.
@KlausCPH至少你离开Perforce时不必准备分手演讲:)

2> Aristotle Pa..:

Perl 5解释器源代码目前正在经历从Perforce转换为git的阵痛.也许Sam Vilain的git-p4raw进口商很感兴趣.

无论如何,对于每个集中式VCS而言,你将获得的主要胜利之一和大多数分布式VCS也是原始的,极快的速度.你无法想象将整个项目历史放在手边是多么的自由,只有几分之一秒,直到你经历过它.即使为每个提交生成包含完整差异的整个项目历史的提交日志,也可以在几分之一秒内进行测量.Git是如此之快,你的帽子会飞走.必须通过网络往返的VCS根本没有竞争的机会,甚至不能通过千兆以太网链路进行竞争.

此外,git使得在提交时非常容易谨慎选择,从而允许工作副本(甚至单个文件中)的更改分布在多个提交中 - 如果需要,可以跨越不同的分支.这使您可以在工作时减少心理记录 - 您不需要如此仔细地计划您的工作,预先确定您将提交的更改集,并确保推迟其他任何操作.您可以随时进行任何您想要的更改,并且在提交时仍然可以解决它们 - 几乎总是非常容易.藏匿在这里可以是一个非常大的帮助.

我发现,总而言之,这些事实使我自然会比使用git之前做出更多更集中的提交.这反过来不仅使您的历史记录更有用,而且对于诸如此类的增值工具特别有用git bisect.

我相信现在还有更多我无法想到的事情.使用git销售团队的建议的一个问题是,许多好处是相互关联的,并且相互影响,正如我在上面暗示的那样,很难简单地查看git的功能和优点列表并推断它们是如何将改变你的工作流程,哪些变化将是真正的改进.您需要考虑到这一点,并且还需要明确指出它.


Git不提供"离线功能",****离线.您通过网络发送数据的唯一方法是将提交推送到原点或从其他子存储库中提取更改.
"Git是如此之快,你的帽子会飞走"爱情:)只有当你开始签入二进制文件时它才不是真的.大回购在git中很麻烦.

3> Tim..:

从perforce转换,我需要很多说服力.我使用它的两家公司绰绰有余.这些都是办公室不同的公司,但办公室设置了充足的基础设施,因此不需要具有不相交/断开的功能.

有多少开发人员在谈论转换?

真正的问题是 - 无法满足贵组织可以提供的组织需求的perforce是什么?同样,git与perforce相比有哪些弱点?如果你不能自己回答,那么在这里询问将无济于事.您需要为您的公司找到一个商业案例.(例如,或许它具有较低的总体拥有成本(包括临时学习阶段的生产力损失,更高的管理成本(至少最初),等等)

我认为你是一个艰难的卖点 - perforce是一个非常好的尝试替换.如果你试图启动pvcs或ssafe,这是一个没有脑子的事.


我要补充一点,Git的卓越功能集是以陡峭的学习曲线为代价的.(虽然我从来没有发现Perforce的所有直观性.)
你必须在商业环境中支付Perforce的费用,而且我总是发现Perforce要使用它.我真正看到的唯一优势是它擅长处理巨大的二进制blob.
实际上,我们在评论中有一个*相关的*对话,一旦"你确定你不想动这个去聊天"提示就出现了,有人终于注意到这个问题实际上是不适合的所以.它实质上是在询问为什么一个系统比另一个系统"更好",并引发了大量激烈的辩论.
@Justin:谨防"我们只会使用基本功能"的原因.使用git,您将最终使用更高级的东西.你为什么不呢?Bisect立即浮现在脑海中.如此反思和挑选.

4> tialaramex..:

我认为,在转换期间/之后保持人们满意的方面,早期遇到的一件事就是本地分支机构在Git中的私密程度,以及让他们犯错的自由度.让他们全部克隆当前代码中的一些私有分支,然后在那里疯狂,进行实验.重命名一些文件,检查内容,合并来自另一个分支的内容,回滚历史记录,将一组更改重新组合在另一个上面,依此类推.显示当地最严重的事故对他们的同事没有任何影响.您想要的是开发人员感到安全的情况,因此他们可以更快地学习(因为Git有一个非常重要的学习曲线),然后最终使他们作为开发人员更有效.

当您尝试学习集中式工具时,显然您会担心会为存储库的其他用户造成问题.仅仅害怕尴尬就足以阻止人们进行实验.即使拥有一个特殊的"培训"存储库也无济于事,因为开发人员不可避免地会遇到生产系统中他们在培训期间从未见过的情况,因此他们又回到了担忧状态.

但Git的分布式性质消除了这一点.您可以尝试在本地分支中进行任何实验,如果它出现严重错误,只需将分支扔掉,没人需要知道.既然您可以创建任何东西的本地分支,那么您可以复制您在实际存储库中看到的问题,但没有"破坏构建"或以其他方式愚弄自己的危险.你可以检查所有内容,一旦你完成它,不要尝试批量处理整齐的小包.因此,不仅仅是你今天花了四个小时的两个主要代码更改,而且还有你记得中途的构建修复,以及你在向同事解释内容时发现的文档中的拼写错误,等等.如果由于项目正在改变方向而放弃了重大变化,


这个评论在技术上是正确的,但这有点遗漏了这一点.修订控制系统是一种社交工具.在社交上,共享服务器中带有您姓名的分支不是共享的"私有"分支.是的,即使有ACL和任何适当的地方.也存在技术差异(显然我的git私人分支在我上下班时使用,没有/不可靠的互联网),但他们是社会差异的附属品.
一个私人分支与perforce,只是很糟糕.您在git中创建和切换分支的难易程度无法与perforce进行比较.无论如何,私人真正是一个强大的"私人"分支.你不要把它保持在本地.您完全依赖于网络访问.

5> Ryan..:

在git上亲自卖给我的命令是bisect.我认为此功能在目前的任何其他版本控制系统中都不可用.

话虽如此,如果人们习惯于GUI客户端进行源代码控制,他们就不会对git印象深刻.现在唯一的全功能客户端是命令行.


SourceTree也是另一个不错的原生osx客户端.它被收购后变得自由了.我已经使用它一段时间了,我喜欢它.在使用SourceTree之前,我主要是命令行.
自从git存在之前,darcs已经"追踪"了.诚然,早期的版本非常粗糙.
关于UI - OSX上的GitX非常出色.

6> Thomas L Hol..:

人们使用Perforce的功能是什么?

单台机器上的多个工作区

编号的变更清单

开发者分支

与IDE集成(Visual Studio,Eclipse,SlickEdit,...)

许多构建变体

复合工作空间

集成一些修复但不包含其他修复

等等

我问,因为如果所有人都在做的是从命令行获取和放置,git已经覆盖了所有其他RTS.


@Tomas:你为什么不......只需要两次检查?Perforce需要将其作为"功能",因为否则会因为必须确保正确设置环境变量,注册表项正确等等而变得奇怪.
不确定"单机上的多个工作空间"意味着什么 - 其他VCS根本没有工作空间的概念,所以它实际上不能被吹捧为Perforce的功能.其他人有意义.

7> Aristotle Pa..:

显然GitHub现在为公司提供git培训课程.答曰他们的博客文章吧:

在过去的几周里,我一直在谷歌校园里帮忙训练过Git中的机器人.我被Shawn Pearce问过(你可能从他的Git和EGit/JGit荣耀中认识他 - 他是Junio离开城镇时接管维护的英雄)进来帮助他训练在Andriod工作的Google工程师过渡从Perforce到Git,Android可以与大众分享.我可以告诉你,我非常乐意这样做.

[...]

Logical Awesome现在正式向所有公司提供此类定制培训服务,如果您考虑转换到Git,我们可以帮助您的组织进行培训和规划.

强调我的.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有