本篇演示Git的HelloWorld示例,主要内容有三个部分,Git安装,Git的HelloWorld示例,Git的目录结构。
1、安装
在Window安装Git,需要安装两个软件,
第一个是Git软件,它的下载地址是https://www.git-scm.com/download/,
第二个是Git图形界面,推荐使用TortoiseGit,GitExtension,在官网上有各种类型的UI工具,下载地址是https://www.git-scm.com/download/gui/windows。
安装Git准备,Git 64位的安装包已下载。电脑上不存在Git。
准备完之后,安装Git的步骤如下:
第一步,运行exe安装程序,点击next,选择安装目录
第二步,选择组件(Component),全选上也没有问题
第三步,在开始菜单创建Git文件夹。
第四步,选择Git使用的编辑器。它的默认值是Vim,是Linux平台上的编辑器,这里我选择use Sublime Text as Git’s default editor。下拉列表可以看到其他编辑器,例如notepad++等。
第五步,选取Git命令的运行环境。
第一个选项Use Git from Git base only,只在git bash下执行git命令。若想要在cmd中执行git命令,后续可以修改环境变量,把install_dir/bin添加到环境变量中。
第二个选项,Git会安装一些Unix工具,并且会把Git命令存放的目录添加到环境变量中。
第三个选项,使用Git
第六步,建立SSL连接时,采用何种策略,这里选择OpenSSL,它是非常著名的生成证书的工具。有兴趣的可以研究下。
第七步,选择换行符,我这里选择的是checkout as is, commit as is。现在主流的版本库是Github, 不是Linux服务器。若是在Window上有开发版本库,在Linux上有发布版本库,选择第一项。
第八步,配置Git base仿真器,在windows上的话我选择MinTTy,因为cmd运行git命令这种方式,只需要配置环境变量即可,git bash和cmd的功能重复了。
第九步,配置其他附加的,可选的功能
开启文件系统缓存可以大幅度提升性能,这个必选。
允许Git的证书存放在Window证书管理中心,这个建立SSL连接时必选,不然自己手动添加比较麻烦。
允许软链接,在Linux系统中,有两种链接,软链接,硬链接。在window下不必开启。
第十步,点击install, 最后点击finish完成即可。
2、HelloWorld示例
下述将演示Git,创建Git仓库,执行最基本的操作。步骤如下:
第一步, 创建first_git_repo(名称随意)文件夹,进入文件夹,执行git init。
创建完成之后,会创建隐藏的.git文件夹。
第二步,创建Hello.txt文件,执行git add Hello.txt命令。
Git版本库存在三种区域,工作目录,索引,底层的数据库。当创建Hello.txt文件时,它存在于工作目录下,执行add之后,它添加到索引中。
这个过程是称为”stage”,意思是指工作目录提交到底层版本库需要两个步骤,添加到索引中,之后再提交到本地版本库中。Stage的字典解释是a period or state that sth/sb passes through while developing or making process。在Git中指提交过程中的一个阶段。
第三步,执行git status。
可以查看版本库的状态。
第四步,执行git commit -m “初始化提交”
提交变更,执行完之后可以查看.git/objects目录下存在一些二进制文件。说明已提交成功
第五步,执行git log, 也可以执行git show-branch。
查看版本库的提交记录,由于量小,可以直接使用此命令,当量比较多时,建议执行git log > log.txt,将结果保存到log.txt中查看。
第六步,在Hello.txt文件中添加Hello Git的内容,重复第二步,第四步。
文本内容的变更。
第七步,执行git diff HEAD HEAD~1
比较两次提交记录,可以查看最近一次有哪些变更。结果如下
diff --git a/Hello.txt b/Hello.txt index e51ca0d..e69de29 100644 --- a/Hello.txt +++ b/Hello.txt @@ -1 +0,0 @@ -Hello Git No newline at end of file
若未配置用户名和邮箱,需先配置。配置命令为git config user.name || user.email
3、版本库目录结构
创建完版本库之后,会相对应的创建.git文件夹,该文件夹下存放着所有的核心对象以及很重要的内容。理解各个文件,以及文件夹的作用有助于理解Git是如何运作的,但是不要去手动操作这些文件。下面详细介绍它们
3.1 文件
3.1.1 index
了解Index,首先需要理解索引的概念,以及版本库三种存储类型。
非裸版本库有三种存储类型,
第一种是工作目录,它是指存放于操作系统的文件系统中,此时在索引,底层数据库还未体现。
第二种是索引,此时Git会计算文件的内容,并计算SHA1值,创建blob对象,此时在索引中会保存文件的路径,底层数据库会保存文件的内容。
第三种是底层数据库,它可以根据tree,blob对象完整的还原某个特定版本库的文件目录结构和文件内容。意味着假设在很早之前创建test文件夹,hello.txt,之后删除文件夹,删除hello.txt,或把hello.txt改的面目全非,也可以通过tree, blob对象还原当时的版本库。本质上它是Git对象与文件系统的一种映射。
索引是工作目录最终保存在底层数据库的一个过渡阶段。它记录两个内容,一方面记录文件在文件系统中的目录结构,另外一方面记录文件内容对应的blob对象。可以理解Index就是一座桥梁。
3.1.2 config
config文件保存版本库的配置信息,最常见的user.name,email。
操作config文件的方式有两种,
第一种方式是通过文本编辑器进行编辑,这种方式需要深刻理解每个配置项的含义,修改失败往往会导致配置文件不可用。
第二种方式是通过命令的方式,最常见的命令是git config, 其他命令也会反映在配置项上,例如git remote, git clone等。
查看config文件的方式也有两种,
第一种方式,通过编辑器直接打开查看,这种情况下需要综合全局的配置(user/.gitconfig)和本地版本库的配置(.git/config)
第二种方式,运行git config –-list命令。
在实际应用中,最常见的配置就是用户的信息,远程版本库的一些信息。
3.1.3 description
版本库的描述,没什么用。相当于Java在创建包时,创建的package-info.java,用于描述包的用途。Description文件是类似的,它用于描述版本库的用途。
3.1.4 Head
保存Head当前指向的Commit对象。它包含两个信息,第一个信息是分支名称,第二个信息是Commit对象的信息。
通常情况下,Head总是指向分支的最近一次提交。但是使用reset命令可以改变。在第十章节中会重点介绍reset命令。
3.2 object目录
它用于存放核心对象,blob,commit,tree,每种类型的对象都一一对应SHA1值,并以它的前两位作为目录名称,后126位作为文件的名称。
打开目录,通过人是无法识别出对象的类型,而且也无法查看文件的内容,都是二进制文件。
切记勿修改,移动,删除其中的内容。
3.3 logs目录
存放Git的日志,大部分是引用日志,即HEAD相关的日志。
可以通过git reflog, git log命令查看日志的内容
3.4 hooks目录
它存放钩子,熟悉JS的程序员知道,每个组件都会有很多的事件监听。钩子的作用是监听git的命令,类似于JS中的事件概念。
在实际中适用场景较少,文件夹下存放着一些钩子的示例,供学习和参考。
3.5 refs目录
ref目录用于保存引用类型,它有两个文件夹,heads目录和tags目录
heads目录用于保存HEAD对应的,各个分支的Commit对象,默认是最近一次的Commit对象。
Tags目录用于保存tag对应的Commit对象,初始情况下是空的,当创建tag对象之后,目录下会显示。
stash目录用于保存stash命令产生的一些内容。
至此,本篇内容结束,对应原著的第一章,第二章,第三章。