1. Git 简介
Git 是由 Linux 创始人 Linus Torvalds 于 2005 年创建,最初是为了更好地管理 Linux 内核的开发,后来被广泛应用于软件开发领域。Git 不仅可以用于软件项目的版本控制,它还可以用于对任何类型的文件进行版本控制。如:财务报表,文章修改等。
版本控制的概念
先说一下版本控制。
我们在工作中经常改写一些文档或程序代码文件。当有多次修改该文件后,突然发现我们原来认为不重要的东西被我们删除了。如何找回来了呢?有经验的开发人员会在改写文件前以日期为后缀对之前的文件进行备份,以备不时之需。当有一天真的出现问题后想回到之前的某个版本时。你发现之前备份了上百个文件夹,占用了大量磁盘空间的同时,查找问题的难度也大大增加。解决这一问题的方法就是使用版本控制软件,它可以方便我们管理修改之前的代码。对修改的内容做比较,也可以快速回溯到之前的某个版本在进行重新修改,建立不同分支等操作。同时在多终端用户合作开发时也方便代码的相互传输。
有了版本控制软件,当我们的文件或软件项目出现问题时,你就可以将你的工程文件回溯到之前的某个时间点的状态,你可以比较工程或某个文件的变化细节,查出最后是谁修改了哪个地方,从而找出问题出现的原因。使用版本控制系统通常还意味着,就算你一通乱来把整个项目中的文件删删改改,你也照样可以轻松恢复到原先的样子。 但额外增加的工作量却微乎其微。
目前比较主流的版本控制软件有两种:
- SVN(Subversion)
- Git
其中 SVN 是集中式版本控制系统,即保存版本信息的仓库(Repository)在某一台主机上,所有用户在修改代码时都需要先从仓库拉取(poll)最新文件到本地工作区(Workspace,存放将要编辑的文件的文件夹),待文件修改完毕后提交(Commit)到仓库。这样同一仓库的其它用户在需要更新代码时,只需要重新从仓库拉取最新版本到本地工作区即可。SVN 是比较简单高效的版本控制系统,它的的缺点是在不联网的本地工作区就无法完成版本的提交等工作。后来发展出了 Git 这种 分布式版本控制系统。Git 使用分布式的方式来存储仓库,每一用户都可以从远程仓库克隆(Clone)一份完整的仓库形成本地仓库。同时为仓库创建自己的本地工作区。Git 的好处是可以随时提交自己的修改到本地仓库。也可以快速在本地仓库创建分支。工作完成后我们可以把代码提交到本地仓库,如果需要,还可以将本地仓库的内容推送(push)到远程仓库。实现多人合作开发。
SVN 的集中式架构
+----------------+
| Repository |
+----------------+
/ | \
/ | \
/ | \
+------------+ +------------+ +------------+
| Workspace1 | | Workspace2 | | Workspace3 |
+------------+ +------------+ +------------+
在使用 SVN 时,每个开发者都可以有自己的工作区,在开发完成后将本地工作区的文件提交到仓库,其它工作区就可以获取仓库中的最新代码了。当然其它工作区也可以将自己的文件提交到仓库中。
Git 的分布式架构
+-----------------+
| +-------------+ |
| | Repository1 | |
| +-------------+ |
| | |
| +------------+ |
| | Workspace1 | |
| +------------+ |
+-----------------+
/ \
/ \
+-----------------+ +-----------------+
| +-------------+ | | +-------------+ |
| | Repository2 | | <-> | | Repository3 | |
| +-------------+ | | +-------------+ |
| | | | | |
| +------------+ | | +------------+ |
| | Workspace2 | | | | Workspace3 | |
| +------------+ | | +------------+ |
+-----------------+ +-----------------+
可见 Git 是由多个仓库组成的。仓库用于存储当前工作区的版本信息。同时可以将本地仓库的某个分支合并到其它仓库中。
相比 SVN、Git 是比较复杂的版本控制系统。本教程将带你快速了解和使用 Git,如果你打算深入了解 Git,请查看 Git 的官方网站:https://git-scm.com/ 获取更多的信息。
专业术语:
- 本地仓库(Local Repository):用来存储所有文件、版本信息、历史记录、分支信息的数据结构。
- 远程仓库(Remote Repository):同本地仓库一样,它是存储于服务器或云端的仓库,可以用来团队协作的中心仓库。
- 工作区(Workspace):也称作工作空间或工作文件夹,是在你本地查看和编辑受跟踪文件的文件夹。
实验:
口述 SVN 和 Git 的区别。