zoukankan      html  css  js  c++  java
  • 后端——工具——版本控制工具——Git——HelloWorld示例

      本篇演示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命令产生的一些内容。

    至此,本篇内容结束,对应原著的第一章,第二章,第三章。

  • 相关阅读:
    swift 第十四课 可视化view: @IBDesignable 、@IBInspectable
    swift 第十三课 GCD 的介绍和使用
    swift 第十二课 as 的使用方法
    swift 第十一课 结构体定义model类
    swift 第十课 cocopod 网络请求 Alamofire
    swift 第九课 用tableview 做一个下拉菜单Menu
    swift 第八课 CollectView的 添加 footerView 、headerView
    swift 第七课 xib 约束的优先级
    swift 第六课 scrollview xib 的使用
    swift 第五课 定义model类 和 导航栏隐藏返回标题
  • 原文地址:https://www.cnblogs.com/rain144576/p/14707567.html
Copyright © 2011-2022 走看看