自动化运维持续集成(CI)和持续发布(CD)系列·Git

Git和其它版本控制系统最主要差别在于对待数据的方式,其它版本控制系统以文件变更列表的方式存储信息,如CVS、Subversion、Perforce、Bazaar等,而Git把数据看作是对小型文件系统的一系列快照,每次提交更新或保存项目状态时,它会对当时的全部文件创建一个快照并保存这个快照的索引,更像是一个小型的文件系统,提供了许多以此为基础构建的超强工具,而不只是一个简单的VCS。

Git仓库目录是Git用来保存项目的元数据和对象数据库的地方,也是Git最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

安装Git

Git支持Linux、macOS和Windows系统,访问Git下载页面,根据终端类型选择下载并安装即可,命令安装示例:

# Redhat/CentOS
dnf install git-all
# Ubuntu
apt install git-all
# macOS
git --version

配置文件说明

通过“git config”工具设置Git外观和行为,并保存在配置文件中。

在Linux中,包括以下配置文件(每一个级别会覆盖上一级别的配置,如.git/config的配置变量会覆盖/etc/gitconfig中的变量):

文件 说明
/etc/gitconfig 所有用户及其仓库的通用配置,通过--system选项修改该文件中的配置变量。
~/.gitconfig
~/.config/git/config
只针对当前用户,通过--global选项让Git修改该文件中的变量,并且使系统上所有的仓库生效。
.git/config 当前仓库的Git目录中的config文件,通过--local选项让Git修改该文件中的变量(默认),只对指定的Git仓库生效。

在Windows中,首先查找用户家目录(C:\Users\$USER)下的.gitconfig文件,同样也会寻找/etc/gitconfig文件,但仅在MSys根目录下,即安装Git时所选的目标位置,还有一个仅限管理员通过“git config -f”命令才能修改的系统级配置文件C:\ProgramData\Git\config

常用配置命令

# 获取帮助
git help <verb>
git <verb> --help
man git-<verb>

# 查看所有的配置以及它们所在的文件
git config --list --show-origin
# 配置全局用户
git config --global user.name "Liuzhilin"
# 配置全局邮件
git config --global user.email lzl@olzl.net

管理Git

初始化仓库

在一个空目录中初始化仓库,执行以下命令将创建一个名为.git的子目录:

git init

在一个已存在项目的文件中进行版本,必须进行初始提交:

git add *.c
git add LICENSE
git commit -m 'initial project version'

克隆仓库

Git支持http、git和ssh三种传输协议:

# 通过http协议克隆
git clone https://github.com/lzl/website
# 通过http协议克隆时指定新的目标文件夹
git clone https://github.com/lzl/website newdirname
# 通过git协议克隆
git clone git@10.10.200.202:mygroup/olzl-net.git

跟踪仓库文件

工作目录下的每一个文件不外乎已跟踪或未跟踪两种状态,已跟踪的文件是指那些被纳入了版本控制的文件,它们的状态可能是未修改、已修改或已放入暂存区,通过以下命令查检当前文件状态:

# 状态详情
git status
# 状态简述
git status -s

暂存仓库文件

在工作目录中,如果有新增或者修改文件,需要通过以下命令进行新增跟踪或者暂存:

echo "读我" > README
git add README
echo "还读我" >> README
git add README

移除文件

从已跟踪文件清单(暂存区)中移除,然后提交:

# 下次提交时不再将该文件纳入版本管理
git rm REMOVED.md
# 从Git仓库中删除,但保留在工作目录中
git rm --cached REMOVED.md

忽略文件

针对那些无需被Git管理的文件,可以创建.gitignore文件,在该文件中列出需要忽略的文件,如:

# 忽略所有.bak结尾的文件
*.bak
# 忽略所有.bak结尾的文件但排除git.bak
!git.bak
# 忽略当前目录下的IgFile文件
/IgFile
# 忽略所有目录下名为IgDir的文件夹
IgDir/
# 忽略Dir目录下以.txt结尾的文件
Dir/*.txt
# 忽略Dir目录及其子目录下以.txt结尾的文件
Dir/**/*.txt

提交更新

在提交更新前,通常需要检查文件是否符合要求:

# 查看文件状态
git status
# 查看尚未暂存的该文件更新了哪些内容
git diff
# 查看已暂存的且将要添加到下次提交里的内容
git diff --staged
# 提交更新
git commit

原创文章禁止转载:技术学堂 » 自动化运维持续集成(CI)和持续发布(CD)系列·Git

精彩评论

8+1=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏