git 基本概念介绍

2020-07-16 devops git

起初 git 是 Linus Torvalds 为了便于管理 Linux 内核开发而开发的一个开放源码的版本控制软件,这是一个开源的分布式版本控制系统,可以高效地处理从很小到非常大的项目版本管理。

简单来说,如果你严肃对待编程,就必定会使用"版本管理系统" (Version Control System)。

简介

不像更古老的 SVN 采用集中管理,Git 采用的是分布式的管理,简单来说,如下所示。

git decentralized model

所有人除了可以从 origin 获取提交最新的代码之外,每个人还可以从不同人的代码库中获取代码,这也就意味着,比如两或多个人可以共同开发一个特性,测试无误之后再提交到 origin 即可。

另外,需要注意的是,所有版本控制系统,只能跟踪文本文件的改动;对于像图片、视频这类的二进制文件,虽能管理,但没法跟踪文件内容的变化,只知道从 1K 变为了 2K 而改变的内容不知道。

基本概念

因为是分布式版本管理,本地代码仓都会保存一份完整数据,在本地会分成三部分:

  • Working Directory 工作目录。用来保存当前工作文件所在的目录,在切换分支时会被删除或者替换。
  • Staging Area 暂存区,通过 add 命令添加之后正式提交之前,就保存在这里,作为临时缓存。
  • GIT Directory 也就是 .git 目录,与版本管理相关的历史版本、元数据等,都保存在该目录下。

.git 中隐藏目录中,会自动创建了第一个分支 master,以及指向 master 的一个指针 HEAD。

git stage commit

提交到版本库包含了两步:

  1. 使用 git add 把文件添加到暂存区。
  2. 使用 git commit 把暂存区的所有内容提交到当前分支上。

在修改文件后、执行 add 后、执行 commit 后分别通过 status 命令查看文件的不同状态,也就是说,添加到 stage 区域后,只要未提交,可以多次修改文件并 add 到 stage 区。

配置文件

config 配置有 system(全局)、global(用户)、local(仓库) 三个级别的配置,其中底层可以覆盖顶层配置,对应三个配置文件:/etc/gitconfig~/.gitconfig.git/config ,其优先级依次递增,后者的配置会覆盖前面的配置项。

三者可以通过如下命令查看,通过 --edit 进行编辑,默认是用户级别的。

$ git config --system --list
$ git config --global --list
$ git config --local --list

在使用的时候,通常要增加如下的配置。

----- 设置用户的默认用户名和密码
$ git config --global user.name  "Your Name"
$ git config --global user.email "you@example.com"
$ git commit --amend --reset-author                  未提交远端的可以进行修复

----- 默认的使用nano编辑器,可以选择自己常用的编辑器
$ git config --global core.editor vim
$ git config --global merge.tool  vimdiff 

----- 开启颜色显示
$ git config --global color.ui true

还有一些其它的配置技巧。

----- 设置简单别名
$ git config --system alias.st status     # git st

进入工作根目录,运行 git config -e,这样就只会修改工作区的 .git/config 文件。

常见操作

接下来,先看下一些常见的操作。

----- 1. 创建新仓库
$ git init                                     ← 会在.git目录下保存元数据

----- 2. 创建文件,并添加到版本库中
$ echo 'Hello World!' > README                 ← 新建文件
$ git add README                               ← 添加到版本库中
$ git ls-files                                 ← 查看版本库中的文件
$ git commit -m 'Initial Commit'               ← 提交并添加注释
$ git status                                   ← 是否有未提交的文件

----- 3. 修改文件
$ echo 'What A Hell.' >> README                ← 修改文件添加一行
$ git commit -a -m 'Add a new line'            ← 提交下
$ git log --pretty=oneline                     ← 查看提交信息

----- 4. 回退
$ echo 'It is A real world' > README           ← 覆盖之前的内容
$ git reset --hard HEAD                        ← 回退到之前提交版本,HEAD^(上个) HEAD~N(上N个)
$ git reflog                                   ← 查看版本号,貌似是UUID
$ git reset --hard 6fcfc89                     ← 回退到指定的版本

----- 5. clone一个副本
$ git clone /tmp/foobar .                      ← 从本地复制一个副本
$ git clone username@host:/path/to/repository  ← 复制远端服务器上的仓库

常用技巧

修改仓库地址

如果只是仓库地址修改了,那么可以通过如下方式修改。

$ git remote -v
$ git remote set-url origin GitURLNew

参考