[Git]自译《Git版本控制管理》——1.介绍(二)_Git诞生
译者前言:
本系列译文为作者利用业余时间翻译,有些疏漏与翻译不到位的地方敬请谅解。
不过也很希望各位读者能给出中肯的建议。
方括号的注释,如[1][2]为译者注。
谢谢。
转载请注明出处:blog.csdn.net/zry656565
第一章 Git介绍
第二部分
先例
这本书并不会为你完整地介绍整个版本控制软件的历史。然而,一些具有里程碑意义和创新理念的版本控制软件对Git的横空出世有着非常重要的铺垫作用。(这一部分将有选择性地进行介绍,主要是介绍那些在免费软件社区中出现的版本控制软件的新特性)。
SCCS(Source Code Control System)是在Unix上的一个版本控制软件,由M.J.Rochkind在70年代早期开发。它是在Unix系统上的第一个版本控制软件。
由SCCS提供的中央存储被称为repository[1],这个概念一直被沿用至今天。SCCS也提供了一种简单的锁模型来使得开发过程顺利无阻。如果开发者需要读取文件来测试一个程序,它会先检验这个文件是否是未被锁上的。相对地为了写一个文件,SCCS一定会先给它加锁。当写操作完成以后,SCCS就会把文件放回到repository中并释放锁。
在80年代早期,Walter Tichy开发出了RCS(Revision Control System)。为了对文件不同版本进行有效率的存储,RCS引入了正向和反向增量的概念。
CVS(Concurrent Version System)最初由Dick Grune在1986年设计并实现,Berliner等人又花了四年时间重新实现了它。CVS对RCS进行扩展与修改,获得了巨大的成功。它因此而变得十分受欢迎,同时也在很长一段时间里成为了开源社区的普遍标准。CVS有好多比RCS优秀的地方,包括分布式开发和模型可配置。
此外,CVS引入了锁的一种新的范例。早期的版本控制软件需要开发者在修改每个文件之前都给它加锁,以保证自己在修改时,没有其他人能动这个文件。而CVS则让开发者都有自己的私有工作副本,并且都拥有写文件的权限。接着,除非两个开发者修改了同一行代码,不然不同的开发者所做的修改可以自动地由CVS来进行合并。在这种情况下可能会产生冲突,开发者这时需要对此进行处理。这种新的锁机制使得不同开发者能够并发地进行开发。
就像历史上经常发生的那样,在大家意识到CVS的缺点与不足时,SVN(Subversion)出现了。SVN在2001年被推出,并很快在免费软件社区普及开来。不像CVS,SVN自动提交修改,并且在分支的支持上更为出色。
BitKeeper和Mercurial则与上述几个版本控制软件背道而驰。它们都去除了主repository。作为替代的方案是:整个系统是分布式的,并且对每一个开发者提供他自己的可共享副本。Git的设计就源于这个P2P的模型。
最后,Mercurial和Monotone设计了一种哈希编码来对文件内容进行唯一地识别。这个被赋予文件的编码被称为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也实现了它。
里程碑
在各种糟糕的版本控制软件横行的状况下,Git于2005年4月应运而生。
在4月7号时,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内核都提交到了一个Git的repository中。 它包含了:
17291 files changed, 6718755 insertions(+), 0 deletions(-)
没错,这一共是六百七十万行代码。
从Linux内核被提交到Git到第一补丁上传只花了3分钟。在证明了Git可以正常使用以后,Linux于2005年4月20日向Linux内核邮件列表中的所有人宣布了此事。
Linus清楚自己需要重新投入内核的开发中来,所以他在2005年7月25日将Git源码的维护工作交给Junio Hamano,并对外宣称交给Junio是个绝对明智的选择。
大概两个月以后,Linux内核的2.6.12版本用Git发布了。
Git的名称由来
Linus说“我是一个自大的混蛋,所以我用我的名字来命名我所有的项目。第一个就是Linux,现在这个就叫git”。如果“Linux”是Linus和Minix的结合,那么用这个原本形容愚蠢而毫无存在价值的人的词(git[2])也就能让人理解了。
与此同时,其他人则建议用一个更棒的解释:Global Information Tracker。这种解释似乎更受欢迎。
[1] repository:本意为仓库、知识库。此处应该特指Git版本管理中的一个项目。
[2] git:本意为混帐。
转载请注明出处:blog.csdn.net/zry656565
[Git]自译《Git版本控制管理》——1.介绍(二)_Git诞生的更多相关文章
- git内容补充-Git零基础快速入门-苏玲
https://git-scm.com/book/zh/v2 git历史 集中式版本控制管理:cvs.svn 分布式版本控制管理:git 基本命令 git config --list --global ...
- Git版本控制管理教程(一):介绍
我的个人博客地址:damienzhong.com 原文链接:点击打开链接 1.1 背景 数据是短暂的,且容易丢失的,特别是作为开发人员的我们每天频繁的对项目代码进行更新,容易产生错误代码的变更或者项目 ...
- Git 版本控制管理(一)
Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker(傻瓜式的内容跟踪器) 关于 Git 的 ...
- Git版本控制管理学习笔记4-文件管理和索引
可以认为使用Git时,我们会遇到3个空间:工作目录.索引.版本库.我们关心的,就是在新建.修改等操作时,这三者之间发生了怎样的变化. 笼统的讲,就是在工作目录下编辑,在索引中积累修改, ...
- Git版本控制管理学习笔记3-基本的Git概念
为了更近一步的学习和理解Git的理念,这一节介绍一下Git中的一些基本概念. 基本概念 对象库图示 Git在工作时的概念 一.基本概念: 1.版本库: Git的版本库就是一个简单的数据库,其中 ...
- git版本控制管理实践-4
vcs: version control system 版本控制系统 local vcs, 集中式版本控制系统: centralized vcs; 分布式vcs: distributed vcs Lo ...
- Git版本控制管理学习笔记2--起步
首先确保系统中已经安装了git,这里使用的linux系统. 一.命令行初步使用: 1.git命令: 列出它的选项和最常用的子命令.标准命令格式中,COMMAND代表的就是下面列出的子命令. [root ...
- Git版本控制管理学习笔记5-提交
这个标题其实有些让人费解,因为会想这个提交是动词还是名称? 提交动作是通过git commit命令来实现的,提交之后会在对象库中新增一个提交对象.提交过程中会发生哪些变化,在上一篇笔记 ...
- 利用Git版本控制管理你的项目
准备工作 项目创建完成后,将项目版本控制起来,今后每个版本的迭代会非常清楚,同时也有助于项目进行协同开发. 还有一个十分重要的问题是:项目上线后,线上的运行的程序的配置与线下进行测试的配置文件是不一样 ...
随机推荐
- 在两个Android设备间通过UDP传输目录内文件
这两天下了一个使用UDP传输目录内文件的程序,发出来给大家一起看看,共同进步.有问题请指教. 由于udp丢包比较厉害,因此使用了自定义的内部协议,进行双方的确认. 程序跑起来后,看网络状况,有时候会一 ...
- 在 Windows Azure 网站中配置动态 IP 地址限制
我们最近对 Windows Azure 网站进行了升级,并启用了IIS8的动态 IP 限制模块.现在,开发人员可以为其网站启用并配置动态 IP 限制功能(或简称 DIPR). 可以通过以下链接查看此 ...
- Codeforces 123E Maze(树形DP+期望)
[题目链接] http://codeforces.com/problemset/problem/123/E [题目大意] 给出一棵,给出从每个点出发的概率和以每个点为终点的概率,求出每次按照dfs序从 ...
- 原生javascript实现ajax,post参数
var json = { userid: userid, cid: cid, openid: openid, type: 1 }; // 原生ajax json = (function(obj){ / ...
- linux 知识整理1linux 常见的目录
linux 系统现在也是搭配啦图形操作界面. 本人初次学习linux,不是为工作,我的工作是玩Asp.net 的.学习linux 也算是知识的储备吧. 学习linux必须知道一些基本的知识. 目录 用 ...
- 解决MySQL 一闪而过的情况
首先进入cmd 切入MySQL的安装目录,然后切入 bin 目录 ,输入mysqld -n t --skip-grant-tables命令. 这个 cmd 窗口先不要关闭, 打开另一个窗口 登陆 ...
- TreeSet两种比较
TreeSet底层数据结构是二叉树 判断对象是否一致是通过是对象自身有比较的方法,即使类实现Comparable接口,重写compareTo方法,自己定义比较规则, 若是不想用元素本身的比较方法,又不 ...
- POJ 3974 Palindrome(最长回文子串)
题目链接:http://poj.org/problem?id=3974 题意:求一给定字符串最长回文子串的长度 思路:直接套模板manacher算法 code: #include <cstdio ...
- centos6.5 升级python 到 python 2.7.11 安装 pip
1.首先官方下载源码,然后安装(./configure,make all,make install,make clean,make distclean) 注意:需要先安装zlib-devel,open ...
- codility上的练习(5)
codility出了lesson 5了. (1) 合法括号序列,包括( [ { ) ] }这6种字符的字符串,长度N在[0..200000]范围内,为其是否合法. 要求时间复杂度O(N),空间复杂度O ...