个性化阅读
专注于IT技术分析

深入Git开发:Git的基本概念详细解读

GIT是一个注重速度的分布式版本控制和源代码管理系统,GIT最初是由Linus Torvalds为Linux内核开发而设计和开发的,GIT是一个在GNU通用公共许可证版本2的条款下发布的免费软件。本系列教程解释如何在分布式环境中使用Git进行项目版本控制,同时处理基于web和非基于web的应用程序开发。

一、版本控制系统(version control system)

版本控制系统(VCS)是一种软件,可以帮助软件开发人员一起工作并维护其完整的工作历史。

以下列出的是VCS的功能:

  • 允许开发人员同时工作。
  • 不允许覆盖彼此的更改。
  • 维护每个版本的历史记录。

以下是VCS的类型:

  • 集中版本控制系统(CVCS)。
  • 分布式/分散版本控制系统(DVCS)。

在本章中我们将仅专注于分布式版本控制系统而尤其是Git,Git属于分布式版本控制系统。

二、分布式版本控制系统(distributed version control system)

集中版本控制系统(CVCS)使用中央服务器来存储所有文件,并支持团队协作。但是CVCS的主要缺点是其单点故障,即中央服务器的故障,而不幸的是如果中央服务器宕机了一个小时,那么在那一小时内,没有人可以进行协作。即使在最坏的情况下,如果中央服务器的磁盘损坏并且未进行适当的备份,那么你将丢失项目的整个历史记录,在这里分布式版本控制系统(DVCS)成为现实。

DVCS客户端不仅检出目录的最新快照,而且还包括完全的镜像存储库。如果服务器出现故障,则可以将任何客户端的存储库复制回服务器以进行恢复,每次检出都是存储库的完整备份, Git不依赖中央服务器,这就是为什么离线时可以执行许多操作的原因。脱机时你可以提交更改、创建分支、查看日志以及执行其他操作,你仅需要网络连接即可发布更改并进行最新更改。

三、Git的优点

1、免费和开源

Git是根据GPL的开源许可发布的,它可以通过互联网免费获得,由于它是开源的,因此你可以下载其源代码,也可以根据需要进行更改。

2、又快又小

由于大多数操作都是在本地执行的,因此在速度方面具有巨大优势。 Git不依赖中央服务器,这就是为什么无需每次操作都与远程服务器进行交互的原因。 Git的核心部分是用C编写的,它避免了与其他高级语言相关的运行时开销。尽管Git镜像了整个存储库,但客户端的数据量很小,这说明了Git在客户端压缩和存储数据的效率。

3、隐式备份

有多个副本时,丢失数据的机会非常少。任何客户端上存在的数据都会镜像存储库,因此可以在崩溃或磁盘损坏的情况下使用它。

4、安全

Git使用称为安全哈希函数(SHA1)的通用加密哈希函数来命名和标识其数据库中的对象。在结帐时,每个文件和提交都通过其校验和进行校验和并检索。这意味着,在不了解Git的情况下,不可能从Git数据库更改文件,日期和提交消息以及任何其他数据。

5、无需强大的硬件

对于CVCS中央服务器必须足够强大以服务于整个团队的请求。对于较小的团队来说这不是问题,但是随着团队规模的扩大,服务器的硬件限制可能会成为性能瓶颈。对于DVCS除非开发人员需要推送或提取更改,否则开发人员不会与服务器进行交互,所有繁重的工作都发生在客户端,因此服务器硬件确实可以非常简单。

6、分支更容易

CVCS使用便宜的复制机制,如果我们创建一个新分支,它将所有代码复制到该新分支,这样既费时又效率不高,而且CVCS中分支的删除和合并既复杂又费时。但是使用Git进行分支机构管理非常简单,创建、删除和合并分支仅需几秒钟。

四、DVCS术语

1、本地存储库(local repository)

每个VCS工具都提供一个私人工作场所作为工作副本。开发人员在其私人工作场所进行更改,并且在提交后,这些更改将成为存储库的一部分。 Git向他们提供了整个存储库的私有副本,这使它更进一步,用户可以使用此存储库执行许多操作如添加文件、删除文件、重命名文件、移动文件、提交更改等等。

2、工作目录和暂存区或索引

工作目录是检出文件的位置。在其他CVCS中开发人员通常进行修改并将其更改直接提交到存储库,但是Git使用不同的策略, Git不会跟踪每个修改过的文件。每当你提交操作时,Git都会在登台区域中查找文件,仅考虑暂存区域中存在的那些文件,而不考虑所有修改后的文件。

让我们看看Git的基本工作流程:

步骤1-从工作目录中修改文件。

步骤2-将这些文件添加到临时区域。

步骤3-执行提交操作,将文件从暂存区移出,推送操作后,它将更改永久存储到Git存储库。

git工作流程

假设你修改了两个文件即“ sort.c”和“ search.c”,并且你希望为每个操作进行两次不同的提交,你可以在暂存区中添加一个文件并进行提交,第一次提交后,对另一个文件重复相同的过程。

#第一次提交
[bash] $ git add sort.c

#将文件添加到暂存区
[bash] $ git commit –m "添加了排序操作"

#第二次提交
[bash] $ git add search.c

#将文件添加到暂存区
[bash] $ git commit –m "添加了搜索操作"

3、二进制大对象Blob

Blob代表Binary Large Object,文件的每个版本都由blob表示。,Blob会保存文件数据,但不包含有关该文件的任何元数据。它是一个二进制文件,在Git数据库中,它被称为该文件的SHA1哈希,在Git中文件不按名称寻址,一切都是针对内容的。

4、tree树

树是一个对象代表一个目录,它包含Blob以及其他子目录。树是一个二进制文件,用于存储对Blob和树的引用,这些引用也称为树对象的SHA1哈希。

5、提交commit

提交保存存储库的当前状态,提交也由SHA1哈希命名。你可以将提交对象视为链接列表的节点,每个提交对象都有一个指向父提交对象的指针,从给定的提交中,你可以通过查看父指针以查看该提交的历史记录来进行遍历。如果一个提交有多个父提交,则通过合并两个分支来创建该特定提交。

6、分支branch

分支用于创建另一条开发线,默认情况下Git有一个master分支,与Subversion中的trunk相同。通常创建分支以使用新功能,功能完成后它将与master分支合并回去并删除该分支,Git由HEAD引用每个分支,它指向分支中的最新提交,无论何时进行提交,HEAD都会使用最新的提交进行更新。

7、标签tag

标签在存储库中使用特定版本分配有意义的名称。标签与分支非常相似,但是区别是标签是不可变的,这意味着tag是一个分支,没有人打算对其进行修改。一旦为特定的提交创建了标记,即使你创建了新的提交,也不会对其进行更新,通常开发人员为产品发布创建标签。

8、克隆clone

克隆操作将创建存储库的实例,克隆操作不仅检出工作副本,而且还镜像了完整的存储库,用户可以使用此本地存储库执行许多操作,只有在同步存储库实例时才涉及网络。

9、pull拉

拉操作会将更改从远程存储库实例复制到本地,拉操作用于两个存储库实例之间的同步,这与Subversion中的更新操作相同。

9、推送push

推送操作将更改从本地存储库实例复制到远程实例,这用于将更改永久存储到Git存储库中,这与Subversion中的提交操作相同。

10、HEAD

HEAD是一个指针,它始终指向分支中的最新提交,无论何时进行提交,HEAD都会使用最新的提交进行更新,分支的头存储在.git/refs/heads/目录中。

$ ls -1 .git/refs/heads/
master

$ cat .git/refs/heads/master

11、修订版

修订版表示源代码的版本。,Git中的修订由提交表示,这些提交由SHA1安全哈希标识。

12、URL

URL代表Git存储库的位置, Git URL存储在配置文件中。

$ pwd
/home/user/user_repo

$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = user@git.server.com:project.git
fetch = +refs/heads/*:refs/remotes/origin/*
赞(0)
未经允许不得转载:srcmini » 深入Git开发:Git的基本概念详细解读

评论 抢沙发

评论前必须登录!