Git教程1——概论

来源:互联网 发布:曼联92黄金一代 知乎 编辑:程序博客网 时间:2024/06/05 17:13

Git是一个版本管理系统(VCS,version control system),其诞生只为一个目的,那就是管理文件的变更。它使得你可以记录软件项目的任何更改,以及更改的位置。这也使得git成为管理大型项目不可或缺的工具,同时也是你各种工作流程的得力助手。

版本控制简史

在谈到git背后的核心理念之前,首先我们大致浏览一下版本控制系统的变革史。

文件和目录

版本控制软件诞生之前,只有文件和目录。这时记录项目版本信息的方法就是,复制整个项目目录,然后重命名。回想一下,你是否经常将备份文件命名为类似my-term-paper-2.doc的文件。其实这就是一种最原始的版本控制。
Revision control with files and folders
不过显而易见的是,对于软件开发者来说,复制一个目录到另一个目录是多么令人沮丧。假如目录名被拼写错误了怎么办?再者,你错误的覆盖了某个文件又该怎么办?你又该如何得知是否丢失了一段重要的代码?值得庆幸的是,很快开发者们就意识到需要一个更可靠的工具了。

本地VCS

之后,开发者们就开始编写一些工具程序来帮助自己进行版本管理了。借助于这些工具程序,旧版本的文件不再独立存在,而是被放到了数据库。当你需要旧版本文件时,工具程序(VCS)就到数据库中将之取回。这样,任意时刻都只有一个版本被检出(checked out),从而大大降低了文件混淆和错误覆盖的可能性。
这里写图片描述
这时的版本管理都在开发者的本地进行,多个开发者分享代码很不方便。

集中式VCS

引入集中式版本控制系统(CVCS)后。CVCS会将所有的版本信息存储在服务器。开发者通过网络检出和提交代码到服务器。这方便了多个开发者在一个项目上分工协作。
这里写图片描述
虽然相比与本地VCS,这是很大的进步,但是集中式系统然后有一些问题:多个人同时工作于同一个文件怎么办?试想如此场景,两个人同时修改同一个bug,并试图向服务器提交他们的更改,服务器应该接收哪个提交?

CVCS的解决办法是,禁止覆盖他人的更改。如果有更改发生冲突,必须有个人做出让步,并手动合并这些差异。这个方法适用于需要相对较少更改(意味冲突相对较少)的项目。如果项目有多个活跃的参与者,并且每天提交很多更新,这种解决办法就会显得笨拙:开发工作有时不得不中止以等待所有冲突得到解决。

分布式VCS

新一代的版本控制系统摒弃了集中代码仓库(repository)的概念,取而代之的是让每个开发者拥有一个项目代码仓库的本地拷贝。如此形成的分布式系统使得开发者可以独立工作,这在某种程度上和本地VCS类似,同时集中式VCS中遇到的冲突决议问题得到了更好的解决。
这里写图片描述
由于没有了一个中央集中的代码仓库,每个开发者可以按照自己的步调工作,在本地存储更新,并且只需要在方便的时刻进行冲突合并即可。除此之外,分布式版本管理系统(DVCS)致力于对独立分支开发的有效管理。这使得更加方便于代码分享,合并冲突,以及新想法的试验。

分布式版本控制系统(DVCS)的本地属性也有益于加快开发进度,毕竟你不再需要频繁的通过网络进行操作。同时DVCS也大大减小了由于服务器瘫痪或者其它原因操作数据丢失的可能性,因为参与开发的每个人都拥有一个本地代码仓库。

git诞生

因此,git横空出世。一个为了管理Linux内核而创造出来的分布式版本管理系统。2005年,Linux社区不再被授权使用一款从2002年就开始使用的商业DVCS,BitKeeper。作为回应,Linus Torvalds倡议开发一个新的替代品,然后git就诞生了。
作为Linux内核的源代码管理工具,git具有以下特性,包括:

  • 可靠
  • 大型项目的高效管理
  • 支持分布式开发
  • 支持非线性开发

即使当时有一些其它的DVCS存在(如,GNU的Arch或者David Roundy的Darcs), 但是没有一个可以满足所有这些要求。在这个目标的驱动下,经过多年的努力开发,git已经十分可靠,受到了广大的欢迎,和社区的积极参与。

git最开始是作为一个命令行工具发行的,经过多年的发展,多种可视化界面也已经可用了。图形界面屏蔽了git背后的一些复杂度,使得可以很直观的了解一个代码仓库的状态,虽说如此,坚实的分布式版本控制基础知识还是非常有必要的。本着这个考虑,在本教程中我们坚持使用命令行,毕竟这也是与git交互的通用方式。

安装

在接下里的章节中,我们会通过将git应用到真实场景的方式来探索git的各种特性。前提是你已经安装好了git。各平台的安装包可以在git官网下载。

对于Windows用户,这会安装一个特殊的命令行终端,Git Bash。所有的git命令都应该通过这个终端输入而不是系统自带的命令提示符。OS X和Linux用户可以通过原生终端输入git命令。为了验证你是否安装成功,开打终端并运行git --version。你应该看到输出类似git version 1.7.10.2 (Apple Git-33)的信息。

预备开始

请记住本教程是为了展示git的各种特性,而不是仅仅给出一些常用的git命令。为了确保从本教程学到更多的知识,请务必在终端中执行你读到的每个命令。让我们坐到电脑前开始吧!

0 0
原创粉丝点击