• [Git]自译《Git版本控制管理》——1.介绍(二)_Git诞生


    译者前言:
         本系列译文为作者利用业余时间翻译,有些疏漏与翻译不到位的地方敬请谅解。
         不过也很希望各位读者能给出中肯的建议。
         方括号的注释,如[1][2]为译者注。
         谢谢。

    转载请注明出处:blog.csdn.net/zry656565


    第一章 Git介绍

    第二部分

    先例

            这本书并不会为你完整地介绍整个版本控制软件的历史。然而,一些具有里程碑意义和创新理念的版本控制软件对Git的横空出世有着非常重要的铺垫作用。(这一部分将有选择性地进行介绍,主要是介绍那些在免费软件社区中出现的版本控制软件的新特性)。

            SCCSSource Code Control System)是在Unix上的一个版本控制软件,由M.J.Rochkind70年代早期开发。它是在Unix系统上的第一个版本控制软件。

            由SCCS提供的中央存储被称为repository[1],这个概念一直被沿用至今天。SCCS也提供了一种简单的锁模型来使得开发过程顺利无阻。如果开发者需要读取文件来测试一个程序,它会先检验这个文件是否是未被锁上的。相对地为了写一个文件,SCCS一定会先给它加锁。当写操作完成以后,SCCS就会把文件放回到repository中并释放锁。

            在80年代早期,Walter Tichy开发出了RCSRevision Control System)。为了对文件不同版本进行有效率的存储,RCS引入了正向和反向增量的概念。

            CVSConcurrent Version System)最初由Dick Grune1986年设计并实现,Berliner等人又花了四年时间重新实现了它。CVSRCS进行扩展与修改,获得了巨大的成功。它因此而变得十分受欢迎,同时也在很长一段时间里成为了开源社区的普遍标准。CVS有好多比RCS优秀的地方,包括分布式开发和模型可配置。

            此外,CVS引入了锁的一种新的范例。早期的版本控制软件需要开发者在修改每个文件之前都给它加锁,以保证自己在修改时,没有其他人能动这个文件。而CVS则让开发者都有自己的私有工作副本,并且都拥有写文件的权限。接着,除非两个开发者修改了同一行代码,不然不同的开发者所做的修改可以自动地由CVS来进行合并。在这种情况下可能会产生冲突,开发者这时需要对此进行处理。这种新的锁机制使得不同开发者能够并发地进行开发。

            就像历史上经常发生的那样,在大家意识到CVS的缺点与不足时,SVNSubversion)出现了。SVN2001年被推出,并很快在免费软件社区普及开来。不像CVSSVN自动提交修改,并且在分支的支持上更为出色。

            BitKeeperMercurial则与上述几个版本控制软件背道而驰。它们都去除了主repository。作为替代的方案是:整个系统是分布式的,并且对每一个开发者提供他自己的可共享副本。Git的设计就源于这个P2P的模型。

            最后,MercurialMonotone设计了一种哈希编码来对文件内容进行唯一地识别。这个被赋予文件的编码被称为moniker,十分便于处理。Git也以这个概念为特色。在内部实现上,Git标识符基于文件内容。这是一种内容寻址的文件存储概念。当然,这个概念也不是最前沿的。(比如你可以看Bell Labs写的”The Venti Filesystem”(Plan 9), http://www.usenix.org/events/fast02/quinlan/quinlan_html/index.html.)。按Linus的说法,Git直接借鉴了Monotone的优点。在Mercurial同样实现了这个概念的同时,Git也实现了它。

    里程碑

            在各种糟糕的版本控制软件横行的状况下,Git20054应运而生。

            在47号时,Git在输入以下的提交信息后,变为自托管的:

                    commit e83c5163316f89bfbde7d9ab23ca2e25604af29

                    Author: Linus Torvalds <torvalds@ppc970.osdl.org>

                    Date: Thu Apr 7 15:13:13 2005 -0700

                    Initial revision of "git", the information manager from hell

            没过多久第一个在Git上的Linux版本被提交:

                    commit 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2

                    Author: Linus Torvalds <torvalds@ppc970.osdl.org>

                    Date: Sat Apr 16 15:20:36 2005 -0700

                    Linux-2.6.12-rc2

                    Initial git repository build. I'm not bothering with the full history,

                    even though we have it. We can create a separate "historical" git

                    archive of that later if we want to, and in the meantime it's about

                    3.2GB when imported into git - space that would just make the early

                    git days unnecessarily complicated, when we don't have a lot of good

                    infrastructure for it.

                    Let it rip!

            这次提交几乎将整个Linux内核都提交到了一个Gitrepository中。 它包含了:

                    17291 files changed, 6718755 insertions(+), 0 deletions(-)

            没错,这一共是六百七十万行代码。

            从Linux内核被提交到Git到第一补丁上传只花了3分钟。在证明了Git可以正常使用以后,Linux2005420日向Linux内核邮件列表中的所有人宣布了此事。

            Linus清楚自己需要重新投入内核的开发中来,所以他在2005725日将Git源码的维护工作交给Junio Hamano,并对外宣称交给Junio是个绝对明智的选择。

            大概两个月以后,Linux内核的2.6.12版本用Git发布了。

    Git的名称由来

            Linus说“我是一个自大的混蛋,所以我用我的名字来命名我所有的项目。第一个就是Linux,现在这个就叫git”。如果“Linux”是LinusMinix的结合,那么用这个原本形容愚蠢而毫无存在价值的人的词(git[2])也就能让人理解了。

            与此同时,其他人则建议用一个更棒的解释:Global Information Tracker。这种解释似乎更受欢迎。

    [1] repository:本意为仓库、知识库。此处应该特指Git版本管理中的一个项目。

    [2] git:本意为混帐。


    转载请注明出处:blog.csdn.net/zry656565

  • 相关阅读:
    Spring MVC多动作控制器
    Spring MVC简单URL处理程序映射
    Spring MVC控制器类名称处理映射
    Spring MVC文件上传处理
    再探Tomcat
    Git教程之工作区和暂存区
    linux系统启动级别
    浅析JAVA_HOME,CLASSPATH和PATH的作用
    *Linux之rm命令
    @CentOS环境下Java开发环境的搭建
  • 原文地址:https://www.cnblogs.com/riasky/p/3429197.html
Copyright © 2020-2023  润新知