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