Git--Git基本介绍

一、版本控制介绍

1、版本控制系统的概念

版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 实际上,可以对任何类型的文件进行版本控制(例如写作)。

2、版本控制系统的类型

(1)本地版本控制系统

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。 这么做唯一的好处就是简单,但是特别容易犯错。 有时候会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异(例如RCS)。

(2)集中化的版本控制系统

集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS)能让在不同系统上的开发者协同工作。 这类系统,诸如 CVS、Subversion 以及Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 多年以来,这已成为版本控制系统的标准做法。

该系统每个人都可以在一定程度上看到项目中的其他人正在做些什么。 而管理员也可以轻松掌控每个开发者的权限

缺点是中央服务器的单点故障(宕机)。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。 如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。 本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新记录的风险。

(3)分布式版本控制系统

分布式版本控制系统(Distributed Version Control System,简称 DVCS)能避免服务器宕机带来的问题。 在这类系统中,像

Git、Mercurial、Bazaar 以及 Darcs 等,客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的克隆操作,实际上都是一次对代码仓库的完整备份。

多这类系统都可以指定和若干不同的远端代码仓库进行交互。籍此,你就可以在同一个项目中,分
别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以
前的集中式系统中是无法实现的。

 

二、Git简史

1、Linux 内核开源项目有着为数众广的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper 来管理和维护代码。
2、到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用BitKeeper 时的经验教训,开发出自己的版本系统。 他们对新的系统制订了若干目标:
(1)速度
(2)简单的设计
(3) 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
(4) 完全分布式
(5)有能力高效管理类似 Linux 内核一样的超大规模项目(速度和数据量)
自诞生于 2005 年以来,Git 日臻成熟完善,在高度易用的同时,仍然保留着初期设定的目标。 它的速度飞快,极其适合管理大项目,有着令人难以置信的非线性分支管理系统

 

三、Git基础

1、直接记录快照,而非差异比较

(1)对待数据,其它版本控制系统(包括 Subversion 和近似工具)的主要工作重点是记录版本间的数据差异

(2)对待数据,Git的主要工作重点是对当时的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流,把数据看作是对小型文件系统的一组快照。

2、近乎所有操作都是本地执行

在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。这也意味着你离线或者没有 VPN 时,几乎可以进行任何操作。

3、Git 保证完整性

(1)Git 中所有数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。

(2)Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串,基于 Git 中文件的内容或目录结构计算出来。 SHA-1 哈希看起来是这样:

(3)Git 中使用这种哈希值的情况很多,你将经常看到这种哈希值。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名。

4、Git 一般只添加数据

(1)执行的 Git 操作,几乎只往 Git 数据库中增加数据。这使得Git很难以任何形式清除数据。

5、三种状态

(1)Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。

a、 已提交表示数据已经安全的保存在本地数据库中。 

b、已修改表示修改了文件,但还没保存到数据库中。 

c、已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

(2)由此引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。

 

(1)Git 仓库目录是 Git 用来保存项目的元数据对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

(2)工作目录对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

(3)暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作`‘索引’',不过一般说法还是叫暂存区域。

(4)基本的 Git 工作流程如下:
a. 在工作目录中修改文件。
b. 暂存文件,将文件的快照放入暂存区域。
c. 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

 

四、命令行

1、安装

具体步骤见书《Pro Git》或者是网上的各种教程,此处略。

2、用户信息

(1)当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会

使用这些信息,并且它会写入到你的每一次提交中,不可更改:

//
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
//

(2)再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事
情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运

行没有 --global 选项的命令来配置。很多 GUI 工具都会在第一次运行时帮助你配置这些信息。

3、文本编辑器

(1)Git 默认的编辑器是vim,不过也可以自己配置别的编辑器,如emacs。

4、检查配置信息

(1)如果想要检查你的配置,可以使用 git config --list 命令来列出所有 Git 当时能找到的配置。

//
$ git config --list
core.symlinks=false
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=E:/Git/git_install/Git/mingw64/ssl/certs/ca-bundle.crt
……
//

(2)你可以通过输入 git config <key>: 来检查 Git 的某一项配置

//
$ git config user.name
wang
//

 

五、获取帮助

1、若你使用 Git 时需要获取帮助,有三种方法可以找到 Git 命令的使用手册:

//
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
//

2、例如,要想获得 config 命令的手册,执行

//
$ git help config
//

 

致谢

1、《Pro Git》第二版

2、Git由浅入深之存储原理--segmentfault

3、Git基础与基本用法

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读