之间的区别是什么操CVS版本控制系统?

我曾愉快地使用的简历了10年,现在我已经被告知那混帐要好得多。可能有人请解释什么是两者之间的区别是,为什么一个比其他更好?

有帮助吗?

解决方案

主要区别是,(它已经在其他的答复)CVS是(老)集中式版本控制系统,同时Git分发。

但即使如果您使用的版本控制的单的开发者,在单个机器(单一账户),有一些差别之间的操CVS:

  • 设立储存库.保存库中 .git 目录是在顶部目录的项目;CVS需要设立CVSROOT,一个中央地点用于储存的版本控制信息用于不同的项目(模块)。后果就设计用户是,现有来源进口到版本控制是以简单的"混帐init&&git添加。&&git提交的"新当它是 更复杂 在CVS.

  • 原子操作.因为CVS在开始时是一组脚本文件RCS版本控制系统,提交(和其他行动)不在原子CVS;如果一个运作在仓库中断中间,储存库可以留在不一致状态。在Git所有的操作都是原子:他们要么取得成功作为一个整体,或者他们失败,没有任何变化。

  • 变更集.改变在CVS是每个文件,同时改变(承诺),在Git他们总是指整个的项目。这是非常重要 范式转变.一个后果是,这是很容易在缝恢复(创建一个变化,撤消),或撤消 整个 改变;其他后果是,在CVS是很容易做到的部分结账,而这是目前不可能在饭桶。事实上,改变每个文件组合在一起导致发明的GNU志格式用于提交信息在CVS;Git用户使用(以及某些工具的期望)的不同公约》与单一的线描述(概述)更改,然后通过空行,随后更加详细的描述的变化。

  • 命名的修订/版本数字.还有另外一个问题相连的事实,在CVS变化是每文件:版本的数字(如你可以看到有时候 关键字膨胀, 见下文)等1.4反映了多少时间给出的文件已经改变。在Git每个版本的项目作为一个整体(每次提交)具有其独特的名称给沙-1识;通常第7-8字都不足以识别一提交(你不能用简单的编号方案的版本分发的版本控制系统--这需要中央权力机构的编号).在CVS有版本的号码或符号名称参见国家的项目作为一个整体你使用 标签;同样是真的在Git如果你想使用的名称,如'v1。5.6-rc2'的一些版本的一个项目...但是标记在Git更容易使用。

  • 简单的分支.分支机构在简历在我看来过于复杂,难以处理。你有标记的分支机构有一个名称为一个整体数据库分支(甚至可能会失败,在一些情况下,如果我记忆正确的,因为每个文件处理)。添加到这一事实,CVS没有 合并跟踪, 所以你必须记住,或手动标签的合并和分叉点,并手动提供正确的信息"cvs更新-j"合并分支机构,它使用的分支是不必要的难以使用。在Git创建与合并分支机构是非常容易;Git记得所有必需的信息本身(以合并的一个分支是作为容易,因为"混帐合并 branchname")...它必须的,因为分布式发展自然会导致多个分支。

    这意味着你能够使用 议题的分支, 即开发一个独立的特征在多个步骤中的单独特征的分支。

  • Rename(和复制)跟踪.文件重新命名是不支持在CVS和手册,重新命名,可能打破历史中的两个,或导致无效的历史,你不能正确地恢复国家的一个项目之前重新命名。会使用的启发式重新命名检测,基于相似的内容和文件(这种解决运作良好,在实践).你也可以要求检测的复制的文件。这意味着:

    • 在审查指定的犯你会得到信息,一些文件被重新命名,
    • 合并正确需要重新命名虑到(例如,如果该文件被命名为只有在一个分支)
    • "混帐怪",(最好)相当于"简历注释",一个工具,以显示行明智的历史上的一个文件的内容,可以按照代码运动在重新命名
  • 二进制文件.简历只有非常有限的支持,为二进制文件(例如图像),需要用户标记的二进制文件的明确时加入(或以后的使用"的简历的管理",或者通过包装以做到自动的基础在文件名称),以避免重整的二进制文件通过的转换和关键的扩展。Git自动检测的二进制文件的基础上内容相同的方式CNU差异和其他工具;你可以替代这种检测使用gitattributes机制。而且二进制文件是对安全的不可恢复的重整由于默认的'safecrlf'(而事实上,你要求的转换,虽然这可能通过默认根据分配),并(有限的)关键词的扩大是一个严格的'退出'在饭桶。

  • 关键字膨胀.Git提供一个非常,非常有限的一套关键词相比CVS(通过默认)。这是因为两个事实:变化Git是每储存库,而不是每个文件,并让可以避免修改文件,并没有改变当转换到其他分支,或者倒到另一点在历史记录。如果你想嵌入修订号令,你应该这样做使用你的建立系统,例如下面的示例的混帐版本代脚本以Linux内核来源和在Git源。

  • 修订的提交.因为在风险分布尽可能的非鉴别法》 出版 是单独的,从创造一个提交人可以改变(编辑,改写)未发表的历史的一部分,而不便其他用户。特别是,如果您通知的输入错误(或其他误差)在提交信息,或一个错误,在提交的,你可以简单地使用"混帐承诺--修改".这是不可能的(至少在没有重型车呀)在CVS.

  • 更多的工具.Git提供了更多的工具,比CVS.一个更重要的是"git分"这可以用来寻找一个犯(修订版),介绍了一个错误;如果你提交小的和自含的应该很容易,然后发现的错误。


如果你合作的至少一个其他的开发,你会发现还存在以下之间的差异操CVS:

  • 提交合并之前 会使用 提交之前,合并 而不是像历, 合并之前提交 (或 更新后的提交).如果当你的编辑的文件,准备用于创建新的承诺(新修订)的人其他创造了新的承诺在同一支现在是在仓库,CVS部队的你的第一次更新工作目录和解决冲突,才允许你提交。这个不是这种情况下,与饭桶。你第一次犯,拯救你的国家中的版本控制,然后合并其他开发的变化。你也可以要求其他开发执行合并和解决冲突。

    如果你喜欢有线的历史和避免合并,你可以随时使用 提交合并再次承诺 工作流程通过"衍合"(和"混帐拉--衍合"),这类似于简历中,你重你的变化上的最新状态。但是你总是提交第一次。

  • 不需要对中央储存库 与混帐是没有必要单个集中的地方,在那里提交你的变化。每个开发商可以有其自己的库(或更好的仓库:私人一个在他/她没有发展,和公共赤一个在那里,她/他发表的一部分,这是准备),并且他们可以拉/取从每个其他资料库,以对称的方式。另一方面它是常见的更大的项目有 社会 定义/提名的中央储存库可从其中每个人都拉(获得改变)。


最后Git提供更多的可能性时合作大量的开发是必要的。下面之间存在差异CVS在工不同阶段的兴趣和位置中的一个项目(版本控制下使用的简历或Git):

  • 潜伏者.如果你有兴趣,只有在得到最新的变化,从一个项目,(没有传播的更改),或者做 发展(不遣回原来的项目);或者你用外项目为基础的自己的项目(变化是地方和没有意义,公布)。

    Git支持在这里 匿名的,未经验证 只读取通过有效的定义 git://协议,或者如果你是背后的防火墙阻挡 DEFAULT_GIT_PORT (9418)可以使用普通HTTP。

    CVS最常见的解决方案(根据我的理解)对于只读访问 游客的帐户 为'pserver'的议定书 CVS_AUTH_PORT (2401),通常称作"匿名"和与空的密码。凭据默认存储在 $HOME/.cvspass 文件,所以你必须提供它只一次;不过,这是一位的障碍(你必须要知道姓名的客户,或者注意到CVS服务器的邮件)和烦恼。

  • 条纹开发人员(叶的贡献).一种方法的传播您的变化开放源码软件是 通过电子邮件发送补丁.这是最常见的解决方案如果你是(或多或少的)意外开发、发送单的变化,或单一的修正。顺便说一句.发送补丁可能是经由审查委员会(贴的审查系统)或类似的装置,不仅通过电子邮件。

    Git提供这里工具,帮助在这一传播(发)机构既可用于发送者(client),和用于维护者(服务器)。谁想要送他们的变化的通过电子邮件有"衍合"(或"混帐拉--衍合")的工具,以重播自己的变化上的目前的上游版本,所以你的变化上的目前的版本(新),以及"git格式修补"创建电子邮件与提交信息(和着作权),改变中的形式(延长)统一差异的格式(加diffstat更容易审查).维护者可以把这些电子邮件直接进入提交保留的所有信息(包括提交信息)使用"git am".

    CVS没有提供这种工具:你可以使用"的简历比较"/"cvs rdiff"产生的变化,并利用GNU贴申请的变化,但是尽我知道有没有办法自动申请的提交信息。CVS是意味着用于在客户 <->的服务器时尚...

  • 中尉.如果你是维护人的独立部分的一个项目(系统),或者如果发展项目下的"网络的信任"的工作流程用于发展的Linux内核...或者只是如果你有自己的公共仓库,并改变你想要发布太大,通过发送电子邮件 贴系列, 你可以发送 请求拉 对(主要的)的维护者的项目。

    这是解决方案的具体要 分布 版本控制系统,所以当然CVS不支持这种方式的合作。甚至有一个工具,称为"混帐请求拉动",这有助于编制电子邮件发送到维护者与求,从你的储存库。由于"混帐束"你可以用这个机制即使不具有公共仓库,通过发送束的变化,通过电子邮件或sneakernet.一些内部主办的网站像 必须支持用于通知,有人为工作(发表了一些工作)关于项目(提供他/她使用相同的Git主办的网站),并于下午-ing一种拉的请求。

  • 主要开发人员, 即人 直接发布 他/她变化(主要的/规范repository)。这一类别是广泛用于分发的版本控制系统,作为具有多个开发商与编写访问的中央储存库不仅是可能的工作流程(你可以有个单一的维护者谁 改变规范的储存库、设置的副手/子系统的维护者从其他/她拉和范围广泛的树叶开发人员发送贴通过邮件或以维护者/项目的邮寄名单,或者要一个助手/submaintainers).

    }类型的你有选择的使用 SSH协议 (git协议包裹在SSH)发布的变化,与工具,如"混帐壳"(帮助安全,限制访问的外壳账户)或 Gitosis (管理接入,而不需要单独壳的帐户), HTTPS WebDAV,与普通HTTP认证。

    与CVS有一个选择之间的定义 未加密的(原文) pserver 协议,或者使用 远程外壳 (你真的应该使用 SSH)发布的变化,这对于 集中 版本控制系统装置犯下您的变化(创建提交).好了,你也可以tunnel'pserver'协议的使用SSH,并有锡尔方工具的自动化这个...但我不认为这是作为容易,因为例如Gitosis.

在一般性分发的版本控制系统,尽可能的非鉴,提供更广泛的选择可能的工作流程。与集中化的版本控制系统,例如CVS,通过必要的你必须区分人与提交访问库,以及那些没有...和CVS没有提供任何工具,以帮助接受捐款,(通过修补)从人没有提交访问。

卡尔*福格尔在 生产开放源码软件 在部分关于版本控制的国家,这是更好地提供不太严格的,硬性的和严格的控制的领域之一是允许作出改变公众的存储库;这是更好的依赖(这个)关于社会限制(例如码的审查),比上技术上的限制;分发的版本控制系统减少,恕我直言,甚至更进一步...

禾田 (希望帮助)

其他提示

Git是 DVCS ,而CVS则是集中式的。简单描述将是:当您未连接到多个可能存储库的任何时,您将获得版本控制的所有好处,而且操作速度更快。

Git网站可能最好地解释了这一点。

我的宠物功能可以在离线时进行提交。而速度,除了推拉之外的一切都是绝对超快的速度。 (而且这些操作设计非破坏性,所以如果你的中央仓库滞后,你可以在你去咖啡时推/拉。)另一个好处是它包括电池:内置 gitk 是一个足够好的历史观察者; git gui 是一个很好的提交工具;使用输出着色, git add -i git add -p git rebase -i 是足够好的交互式界面; git daemon git instaweb 对于ad-hoc协作来说已经足够好了,如果你不想/不能摆弄你的中央回购。

我也是10年以上很喜欢cvs的用户,虽然我也喜欢git,随着时间的推移会更喜欢它,虽然我工作的大部分项目目前都使用cvs或svn,我们可以似乎得到了我工作的确信,让我们在防火墙上打了一个小洞。

使cvs比其它方式更好的一些东西是cvsps,另一个是Andrew Morton的补丁脚本或被子。 Cvsps允许您在提交时将提交的多个文件重构为单个补丁(从而从CVS中提取“更改集”),或者Andrew Morton的补丁脚本允许您提交合理的“更改集”。很容易和舒适地进入cvs,允许你同时处理多件事,同时在提交之前保持它们分开。 CVS有它的怪癖,但我已经习惯了大部分。

“愉快地使用CVS超过x年”,这是一个有趣的想法:-)这是保持大量副本的一大步,但是......

我猜你已经习惯了它的所有怪癖,或者没有做太多的分支和合并。可能性更大;

您组织中的人已经习惯了cvs限制,并且您的工作实践已相应调整;

例如,从来没有一个开发人员一次只能在一个包上工作,只在紧急情况下使用分支等。

基本原则是事情越困难,人们就越少。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top