Pro Git第一章 Git起步

Git 起步

工作后感觉自己Git水平还不够日常开心的使用,因此在cc佬安利下开始看下这本书

关于版本控制

版本控制是一种记录一个或若干文件内容变化,以便查阅特定版本修订情况的系统

本地版本控制系统

顾名思义,本地管理项目版本的同,大多是采用简单的数据库记录文件的历次更新差异

集中化版本控制系统

为了让不同系统上的开发者协同工作,通过一个单一的集中管理的服务器保存所有文件的修订版本,协同工作的成员通过客户端连接到服务器,获取最新的文件或者提交更新。 缺点在于服务器单点故障时则系统失去功能。

分布式版本控制系统

分布式版本控制系统,相比于集中化版本控制系统,客户端并不仅仅存储最新版本的文件快照,而是把整个代码仓库完整的镜像,因此任何一处服务器故障都可以用任何一个镜像出来的本地仓库恢复,最代表性的分布式版本控制系统就是git

Git简史

实际上是Linux内核开源项目的维护过程中,本来用的BitKeeper分布式版本控制系统管理代码,但是合作结束后,他们无法继续使用,因此开发出了自己的版本控制系统Git,Git的开发目标有以下几点:

  • 速度
  • 设计简单
  • 强力支持非线性开发,允许成千上万并行开发分支
  • 完全分布式
  • 具有超大规模项目的管理能力

Git基础

Git直接记录快照,而不是差异比较

每次提交更新,在Git中保存项目状态时,对当时的全部文件制作一个快照并保存快照索引,同时为了高效,如果文件没有修改,Git不会重新存储,而是只保留一个链接指向原文件(这有点像可持久化树之类的原理啊)

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

Git中绝大数操作都只访问本地资源,因为Git在本地磁盘上保存了项目的完整历史,因此不仅速度飞快,还可以离线修改,commit直到有网络再push。

Git保证数据完整性

Git中所有数据都在存储前计算校验和然后以校验和引用,因此Git底层确保记录了所有文件内容的更改,大概方式是通过哈希,实际上Git中保存的信息都是通过文件内容的哈希值来索引,而不是文件名。

Git一般只添加数据

这个我理解是即使是数据的删除,Git也只是增加一个版本记录删除文件,而不会真正Git数据,因此Git不会清除之前的数据,保证了可恢复性。

Git的三种状态

  • 已提交(commit):数据已经安全带保存在了本地数据库中
  • 已修改(modified):修改了文件但还没保存
  • 已暂存(staged):对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中

三种状态对应git的三个工作区概念:

  • Git仓库:Git保存项目元数据和对象数据库的位置,Git最重要的部分
  • 工作目录:从Git仓库的压缩数据库中独立提出对项目某个版本的内容,供我们使用修改
  • 暂存区:一个文件,保存了下次将提交的文件列表信息,一般在Git仓库目录中

基本Git工作流程:

  1. 在工作目录中修改文件
  2. 暂存文件,将文件快照放入暂存区
  3. 提交更新,找到暂存区域文件,将其永久性存储到Git仓库目录

命令行

Git有多种使用方式,包括命令行模式和GUI模式等,但是命令行模式下才能执行所有的Git命令

Git

安装Git

用Linux发行版的基础软件包管理工具安装即可,例如CentOS中:sudo yum install git

基本配置

Git自带git config工具来控制Git行为的配置变量,有三个级别的存储位置

  1. /etc/gitconfig文件,包含系统上每个用户和仓库的通用配置,如果使用带有--system选项的git config就会从这里读取配置变量
  2. ~/.gitconfig或者~/.config/git/config文件:针对当前用户,可以使用--global选项从这里读取配置
  3. 仓库git目录中的config文件(就是./git/config):仅针对仓库

每一个级别覆盖上一个级别的配置,因此意味着,特别情况下,我们可以针对某个仓库特别配置(这点之前不知道,都是用--global

用户信息

安装Git后第一件事就是设置用户名和邮箱地址

1
2
$ git config --global user.name "xxx"
$ git config --global user.email xxx@example.com

这样子是设置是针对当前用户的,设置一次后每次使用Git都会使用到这些信息。根据前文说的覆盖,可以为特定项目使用不同的用户名称和邮件地址,只需要在对应项目目录下运行不带--global的命令即可。

默认文本编辑器

同样是在git config中配置,默认是vim,因此没必要改。

检查配置信息

可以通过git config --list命令检查配置,它将列出所有Git能找到的配置

1
2
3
4
5
6
7
8
$ git config --list
user.name=John Doe
user.email=johndoe@example.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
...

这里可能会看到重复,因为Git会从不同文件中读取配置,例如之前说的三个不同级别的配置中分别读取。
也可以通过属于git config <key>来检查某一项配置,例如:
git config user.name

获取帮助

有三种方式在本地找到Git命令的使用手册

1
2
3
$ git help <verb>
$ git <verb> --help
$ man git-<verb>

例如如果想要活动config命令的手册,可以git help config 或者 git config --help

总结

对Git有了一个基本的了解


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!