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

译者前言:

      本系列译文为作者利用业余时间翻译,有些疏漏与翻译不到位的地方敬请谅解。

     不过也很希望各位读者能给出中肯的建议。

     方括号的注释,如[1][2]为译者注。

     谢谢。


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


1.Git介绍



背景知识

        从来没有哪个细心而富有创造力的人胆敢在没有做好备份的情况下开始做一个项目。因为数据是暂时的,说不定什么时候就被修改了,同时数据也很容易丢失,比如你的磁盘崩溃了。所以对所有的成果都有一个备份是一个明智之举。

        对于包含文字和代码的项目,备份策略一定会包含版本控制,或者跟踪和管理修改。开发者每天都可以做数次修改。不断增长的语料库(corpus)同时发挥了多个作用。它不仅作为repository[1],还作为项目描述、团队交流媒介以及团队和产品的管理工具。但备份策略最关键的作用还是版本控制。

        管理和跟踪软件不同版本的工具通常被称为VCSversion control system)、SCMsource code manager)、RCSrevision control system),也可以是revisionversioncodecontentmanagementsystem等单词的任意排列组合成的名字。虽然各种各样的工具多少会有些不同,但它们都有这样的共同点:开发并维护一个repository、对所有的数据都可以访问它们的历史版本、把所有的修改保存到日志中。在本书中,VCS这个术语将本用于表示一般的版本控制软件[2]

        本书主要介绍的就是一个极其灵活强大且开销很低的版本控制工具——Git。有了Git,使得协同开发变得非常愉快。GitLinus Torvalds[3]开发,用以支持Linux内核的开发。但它已经被证明对很多项目都非常有价值。

 

Git的诞生

        当项目与工具发生了不一致,开发者们通常就会开一个新工具来适应项目。的确,在软件的世界里,开发新工具显得如此简单。但在许多现有的版本控制系统看来,不应该随随便便地就决定重新写一个新工具。然而,如果真的有迫切需求,做一个新工具也未尝不可。

        Git被它的创造者亲切地称为“来自地狱的信息管理者”。虽然在Linux内核社区对“precise circumstances”问题和“timing of its genesis”问题有着激烈的争论,但毫无疑问的是在这“地狱”中诞生了一个在全世界广为流传的超强版本控制软件。

        在使用Git之前,Linux内核开发使用了一款商业的版本控制软件BitKeeper。它提供了许多后来的免费版本控制软件都不会使用的复杂指令。然而在2005年的春天,那家拥有BitKeeper对它的免费版[4]添加了更多的限制。Linux社区意识到不能再使用BitKeeper作为他们的版本控制软件了。

        Linus就开始寻找可以替代BitKeeper的工具。避开那些商业化的工具,他对免费软件包进行了研究,但却发现了同样的缺陷。这使得他也拒绝使用这些工具。当时的版本控制软件到底有什么问题呢?究竟是什么样的特性才是Linus真正想要的呢?

  • 促进分布式开发

        有许多情况下我们会使用分布式开发。Linus想要一种新的版本控制软件来满足这 样的需求。它一定要允许并行开发,开发者能在自己的私人repository里同时进行独立 的和同步的开发,而不用时刻与主干repository同步。这样就避免了一类开发瓶颈。这 种新的版本控制软件必须允许多个开发者在不同的地方开发,甚至有些暂时不连接网 络。

能够管理上千个开发者

        仅仅有一个分布式的开发模型是远远不够的。Linus知道有数以千记的开发者正在 为每一个Linux版本做着贡献,所以对一个公共项目来说,无论开发者们在同一个部分 还是在不同部分上工作,新的版本控制软件都必须能够管理这上千个开发者,并且能够 保证他们的工作成果的完整性和可靠性。

  •  快速高效地执行

        Linus觉得新的版本控制软件必须确保快速与高效。为了单单支持一个Linux内核 工程的巨大更新(update)操作基数,他知道更新操作和网络传输操作必须做到够快。 为了节省空间和传输时间,压缩和“delta”技术是必需的。使用分布式模型来代替集中 式模型也确保了网络延迟不会阻碍日常的开发。

  • 保证数据可靠性

        因为Git是一个分布式版本控制软件,确保数据完整性并保证它不会因某些原因为 被改变是至关重要的。你怎么才能知道你的数据在传给另一个开发人员时没有被改变? 你怎么才能知道你的数据在Gitrepository中是否是真的像Git声称的那样被保存着?

        Git使用一种叫做SHA1Secure Hash Function)的公共密码哈希函数来命名和识 别它数据库中的对象。虽然它也许不绝对正确,但在实际运用中被证明对于所有Git的 分布式repository,这种机制是足够可靠的。

  • 加强问责制

        版本控制软件的一个关键功能就是知道谁修改了文件,甚至还有修改原因。Git加 强每一次提交的修改日志。修改日志中保存的信息由开发者、项目需求、管理以及惯例 等决定。Git保证了在版本控制下没有被秘密修改的文件,因为它对所有的修改都有问 责追踪的机制。

  • 持久性

        Gitrepository数据库包含了持久的数据对象。也就是说,一旦他们在数据库中 被创建,它们就不能被修改。它们可以以不同的方式被重新创建,但原始数据不会有丝 毫改变。Git数据库的这种设计表明整个保存在版本控制数据库中的历史也是持久化的。 使用持久化的对象有很多好处,比如非常迅速地比较两个文件来检测文件是否被修改 过。

  • 原子性事务

        有了原子性事务,一系列不同的但相关联的修改要么都被提交到服务器,要么什么 也没有提交成功。这一特性保证了当有更新或者提交操作时,版本控制数据库不会处于 局部被修改的状态(以至于崩溃)。Git通过记录完整离散的repository状态来实现原子 性事务,因为完整离散的repository状态不能被拆分为更小的状态改变了。

  • 支持并鼓励有分支的开发

        几乎所有的版本控制软件可以在单个项目中命名许多不同分支。比如,一系列代码 修改可以被成为“开发”,而另一堆代码被称为“测试”。每一个版本控制软件都可以把 单独一个line[5]拆分成多个line,然后统一或者合并不同的line。而在Git中,把line成为分支(branch)并且可以给每一分支命名。

        接着分支需要合并。就像Linus希望很简单地就能创建多个分支,他也希望促成简 单地合并这些分支。因为分支合并在版本控制软件中通常是一个充满痛苦和困难的操 作,那么支持快捷的合并同样至关重要。

  • 完整的repository

        独立开发者不需要向一个集中式repository查询历史版本信息。每一个repository都对每一个文件的历史版本有一个完整的备份。

  • 干净的内部设计

        即便最终用户可能不会关心干净的内部设计,这对Linus还有其他Git开发者来说还是很重要。Git的对象模型有一些简单结构来获取原始数据、目录结构、修改记录等的基本概念。把这个对象模型与全局唯一标识符技术结合使得他们可以在分布式开发环境以一种非常干净的方式来管理数据。

  • Be free, as in freedom.

        ‘Nuff如是说。

 

注释:

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

[2] 本书接下来的翻译统一把VCS翻译为:版本控制软件。

[3] Linus TorvaldsLinux的创始人。

[4] 免费版:原文是“free as in beer”。

   free as in beer:具体含义,请参考http://c2.com/cgi/wiki?FreeAsInBeer

[5] line:在Git之前的许多版本控制软件把分支称为line


以上是第一章的第一部分,接下来的部分我有空会补上。

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值