![dcfdf67e36f208f07e23710cd2abad0758eebcac](https://yqfile.alicdn.com/dcfdf67e36f208f07e23710cd2abad0758eebcac.png?x-oss-process=image/resize,w_1400/format,webp)
**
前言
Git的背后有着一个非常精彩的成功故事。2005年4月,Linus Torvalds因不满当时任何一个可用的开源版本控制系统,就亲自着手实现了Git。
时至今日,如果我们在Google中搜索“git version control”这几个关键词,都会看到数以百万计的返回结果。Git已经俨然成为了新型开源项目的一个标准。许多大型的开源项目都已经或正在计划迁移到Git上来。
下面,我们来看一下这么多人之所以会选择Git的原因。
Git允许我们利用分支来开展工作:在一个由多个开发者并行协作的项目中,开发者各自会有很多不同的开发路线。Git的优势在于,它提供了一整套针对开发链的重新整合工具,以便我们对其进行合并、变基和捡取等操作。
工作流上的灵活性:Git非常灵活。不但单一开发者可以用它,敏捷团队也可以找到使用它工作的合适方法,甚至一个由众多开发者在不同的工作地点参与的大型国际项目也可以用它开发出一个很好的工作流。
适合奉献合作:大多数开源项目所依靠的都是开发者的无私奉献。因此,让这种无私奉献的方式尽可能地简单化是一件非常重要的事。而这在一个集中式的版本控制系统中通常是很难做到的,因为我们不可能让所有人都有权限去写版本库。但如果我们使用Git,那么每个人都先可以克隆一个独立的工作版本库,然后再对其进行后续的改动。
高性能:Git在处理拥有许多文件且历史悠久的项目时速度也依然是非常快的。例如,使用Git将Linux内核源码的当前版本切换到6年前的旧版本时,在一台MacBook Air上所需的时间不到1分钟。考虑这两个版本之间有着超过200000次的提交和40000个更改文件,这已经足以让人印象深刻了。
强大的抗故障和抗攻击能力:由于项目历史被分散存储在多个分布式版本库中,因此数据严重流失的可能性不大。再加上版本库中有着巧妙简单的数据结构,这确保了其中的数据即使在遥远的未来也仍然会被正确地解释。而且,它还使用了统一的加密校验,这使得攻击者难以对版本库进行篡改。
离线开发与多点开发:分布式的体系结构可以使得离线开发或者边旅行边开发的方式变得非常容易。而且该结构在多点开发模式下,我们既不需要设置中央服务器,也不需要固定的网络连接。
强大的开源社区:除官方提供的详细文档外,你还可以在该社区找到无数相关的手册、论坛、维基网站等,另外还有各种工具生态系统、托管平台、出版物、服务以及针对各个开发环境的插件,整个社区都正在茁壮成长。
可扩展性:Git为用户提供了许多实用命令,其中包括了能使我们更便于直接访问其远程版本库的命令。这可以让Git变得非常灵活,这种灵活性将允许其各种独立应用提供比默认的Git版本更为强大的功能。
Git非常灵活。可为多种不同的角色所用,从偶尔需要版本化少量shell脚本的单一系统管理员,到Linux内核项目中的上百个开发人员,一切皆有可能。当然,这种灵活性不是没有代价的。在开始用Git来开展工作之前,你还必须要做一组决定。例如以下几种。
Git中固然已经是分布式版本库。但你是真的打算只在本地工作,还是更愿意建立一个中央版本库?
Git支持push和pull两种数据传输类型,但我们需要同时使用它们吗?如果让你选,你会选哪一个?为什么不是另一个?
分支与合并是Git中两个强大的功能。但是,我们应该开多少个分支呢?是根据每个软件功能来开?还是针对每个发行版来开?还是只该有一个分支?
为了便于入门,下面我们来总结一下工作流及其作用。
工作流指的是相关项目的日常操作规程。
工作流会给出具体的步骤。
工作流会显示必要的命令和选项。
工作流非常适用于密切的团队合作,而目前的这些现代软件项目通常就出自这样的合作。
一些工作流可能并不是目标问题唯一正确的解决方案,但它们是一个很好的起点,我们可以从中为自己的项目开发出高效的工作流。
我们之所以会重点介绍商业项目中敏捷开发团队的工作,是因为我们相信目前许多专业开发者(包括作者)都处于这样的工作环境中。当然,这里并不包括那些具有特殊要求的大型项目,因为这些项目通常有着很夸张的工作流,而且我们相信这些也不是大多数开发者会感兴趣的项目。另外,这里也不包括那些开源项目的开发,虽然这些项目也可以用Git规划出一个很有意思的工作流。
目录
**[第1章 基本概念
1.1 分布式版本控制,有何过人之处](https://yq.aliyun.com/articles/92150)**
1.2 版本库,分布式工作的基础所在
1.3 分支的创建与合并很简单
1.4 本章小结
**[第2章 入门
2.1 准备Git环境](https://yq.aliyun.com/articles/92204)**
2.2 第一个Git项目
2.2.1 创建版本库
2.2.2 首次提交
2.2.3 检查状态
2.2.4 提交修改
2.2.5 显示历史
2.3 Git的协作功能
2.3.1 克隆版本库
2.3.2 从另一版本库中获取修改
2.3.3 从任意版本库中取回修改
2.3.4 创建共享版本库
2.3.5 用push命令上载修改
2.3.6 Pull命令:取回修改
2.4 本章小结