Git 使用指南
Li Yanrui
v 0.1, 20080728
liyanrui.m2@gmail.com
前 言
Git 是什么
非常简单地说,Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰
富的命令集,对内部系统提供了高级操作和完全访问。所谓版本控制系统 (Version
Control System),从狭义上来说,它是软件项目开发过程中用于储存我们所写的代
码所有修订版本的软件,但事实上我们可以将任何对项目有帮助的文档交付版本控
制系统进行管理。
2005 年 ,Torvalds 开 始 着 手 开 发 Git 是 为 了 作 为 一 种 过 渡 方 案 来 替 代
BitKeeper,后者之前一直是 Linux 内核开发人员在使用的版本控制工具,当时由
于自由软件社区中的许多人觉得 BitKeeper 的使用许可证并不适合自由软件社区
的工作,因此 Linus 决定着手开发许可证更为自由灵活的版本控制系统。尽管最初
Git 的开发是为了辅助 Linux 内核开发的过程,但是现在很多其他自由软件项目中
也使用了 Git 实现代码版本管理,譬如,X.org 项目、许多 Freedesktop.org 的项目、
Ruby 项目等。
为什么使用版本控制系统
版本控制系统是为懒人准备的,它让懒人们比那些善于备份文档的勤劳人拥有
更干净的文件系统以及更多的可以活着的时间。
本文档主要内容
在第 1 章中讲述如何使用 Git 管理自己的个人文档,主要是初步熟悉 Git 的
诸多概念及其日常基本命令的使用。第 2 章中主要讲述如何基于 Git 实现多人协
作的项目开发模式,以此扭转当前实验室成员在项目研发中各自为政或不能有效
沟通的现状。第 3 章讲述如何利用 Git 强大的项目分支管理功能实现良好风格的
项目协同开发模式。第 4 章为 Git 使用之 FAQ,用于记载在本实验室推广使用
Git 过程中诸位同学所遇到的一些细节问题。
Contents
第 1 章 使用 Git 管理个人文档 1
1.1 何种文档需要保存 1
1.2 建立项目仓库 1
1.3 关于建立 Git 仓库的一些细节 2
1.4 仓库与工作树 3
1.5 在项目中工作 4
1.6 查看版本历史 5
1.7 撤销与恢复 7
1.8 如何使用 Git 帮助文档 7
1.9 总结 8
第 2 章 基于 Git 的团队协同开发 9
2.1 两个人如何协同 9
2.2 如何解决仓库合并冲突 10
2.3 三人以至更多人如何协同 12
2.4 M2GE 的协同开发 12
2.5 总结 13
第 3 章 项目分支管理 14
3.1 如何产生项目分支 14
3.2 分支的合并 15
3.3 M2GE 新的协同开发模式 15
3.4 总结 16
第 1 章 使用 Git 管理个人文档
本章讲述如何使用 Git 管理我们的个人文档,用以展示 Git 的一些基本功能,
并且秉承学以致用、用以促学的精神,引导大家积极地将 Git 应用于日常学习与工
作中的文档备份。仿温水煮蛙之古例,此章乃温水也。
1.1 何种文档需要保存
凡需要持续变动的文档皆可作为项目并交付于 Git 进行管理。由于 Git 可以详
细地记录对于项目的各种修改并提供了功能强大的版本控制,因此愈是修改较为频
繁的文档,愈是有必要将其纳入 Git 的管理之下。
理论上,Git 可以保存任何文档,但是最善于保存文本文档,因为它本来就是为
解决软件源代码(也是一种文本文档)版本管理问题而开发的,提供了许多有助于文
本分析的工具。对于非文本文档,Git 只是简单地为其进行备份并实施版本管理。
1.2 建立项目仓库
欲使用 Git 对现有文档进行版本控制,首先要基于现有文档建立项目仓库。下
面以本文档的版本管理为例,演示如何将其作为项目并纳于 Git 的版本控制之下。
本文档是由 T
E
X 生成的,对应 T
E
X 源文档皆位于 $HOME/work/m2doc 目录
下,下文为叙述方便,以 Bash 变量 $WORK 代替该目录。首先需初始化 Git 仓库:
$ cd $WORK
$ git init
Git 会作出以下回应:
Initialized empty Git repository in $PROJECT/.git/
上述操作的结果是在 $WORK 目录下创建了一个 .git 隐藏目录,它就是所谓
的 Git 仓库,不过现在它还是空的。另外 $WORK 目录也不再是普通的文档目录了,
今后我们将其称为工作树。
下面应当有选择地将工作树中的一些文档存储至 Git 仓库中。由于 Git 在向
仓库中添加文档时并非是简单地文档复制过去,势必要将所添加文档进行一番处
2
理,生成 Git 仓库所能接受的数据格式,Git 称这个过程为 "take a snapshot"(生成
快照)。若将工作树下所有文档(包含子目录)生成快照,可采用以下命令:
$ cd $WORK
$ git add .
所生成的快照被存放到一个临时的存储区域,Git 称该区域为索引。使用
git-commit 命令可将索引提交至仓库中,这个过程称为提交,每一次提交都意味着
版本在进行一次更新。git-commit 最简单的用法如下:
$ git commit
执行上述 git-commit 命令时,Git 会自动调用系统默认的文本编辑器,要求你
输入版本更新说明并保存。请记住,输入简约的版本更新说明是非常有必要的,它就
像剧本一样,可以帮助你快速回忆起对项目的重大改动。
对于简短的版本更新信息,可以使用 git-commit 的“-m”选项,如下:
$ git commit -m "你的版本更新信息"
上述过程即为建立 Git 仓库的一般过程,我将其总结为图1.1所示之流程:
git-init
仓库初始化
git-add
生成快照并存
入项目索引
版本更新说明
git-commit
项目索引提交
图 1.1 Git 仓 库 建 立 流 程
1.3 关于建立 Git 仓库的一些细节
看过上一节内容,也许你会跃跃欲试,准备拿自己的一个文档目录下手。切莫如
此着急,为了概念的完整性,上一节内容中,我故意省略了两个细节问题,下面逐一
道来。