持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
一、版本控制系统 VCS 与 Git
在版本控制系统出现之前版本控制实现的方式通常都是通过拷贝修改文件夹、给文件添加日期或者 v1、v2 这样的标识来实现的,至少我们当时在做性能测试脚本的版本管理时是这样的,几个人协作的时候泽中方式会导致沟通成本非常高,并且非常容易出错,一不小心就拷贝错了或者被覆盖了。
后来就是用了 SVN 来实现版本控制,SVN 是一种集中式的版本控制系统,有一台 Central Server 中保存着所有的版本历史,具备了文件版本管理能力和分支管理能力,集成效率明显提高,但是这要求客户端必须与服务端时刻保持连接,并且每个客户端中没有完整的版本历史。
由于 VCS 商业化,后来 Linus 开发出了自己的开源的分布式管理系统。
集中式和分布式最大的区别就是每个节点都包含了版本的完整历史,每个节点都可以管理版本,版本之间管理无须访问服务器,更能提高版本管理的效率。
Git 的特点:
- 开源、分布式
- 速度快、性能好
- 优秀的存储能力
- 有能力管理类似 Linux 内核一样的超大规模项目 关于 Git 的历史也可以参考 Git Book
二、Git 的安装以及配置
Git 安装
以在云服务器上安装 Git 最新稳定版 2.36.1 为例,安装步骤如下:
代码语言:javascript复制# 检查是否已安装 git
git --versioin
# 删除已安装的 git
yum remove -y git
# 安装依赖
yum install -y gcc perl-ExtUtils-MakeMaker curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
# 下载最新版本的 git
wget https://www.kernel.org/pub/software/scm/git/git-2.36.1.tar.gz --no-check-certificate
# 解压 git 安装包
tar -zxvf git-2.36.1.tar.gz
# 重命名并移动到 /usr/local/ 目录下
mv git-2.36.1 /usr/local/git
# 进入 /usr/local/git 目录,并安装
cd /usr/local/git
./configure
make & make install
# 添加环境变量并重启
echo "export PATH=/usr/local/git/bin:$PATH" >> /etc/profile
source /etc/profile
# 再次查看 git 版本
git --version
通过 git --version
命令查询到已安装的 Git 版本为 2.36.1
Git 配置
Git 安装完成之后可以通过 git --help
来查看帮助命令, git config
命令可以用来配置用户信息,这个配置用于显示代码提交人员的信息,当进行Code Review 或者提交的 PR 被合并了等都会通过设置的邮件信息向用户发送邮件。
git config --global user.name 'your username'
git config --global user.eamil 'your email address'
--global
是指全局配置,如果不填默认是 local
,作用域主要有三个级别:
local
:只对某个仓库有效global
:对当前用户的所有仓库都有效system
:对系统所有登录的用户都有效 如果这三个参数都配置了,提交时所采用的 username 和 email 会采用就近原则
,如果local
有配置就采用,否则才有global
的配置,以此类推。
也可以通过 git config --list --localglobalsystem
来查询不同的配置或者所有配置。
Git 的常用名词概念
Git 仓库 Repository
目录是 Git 用来保存项目的元数据和对象数据库的地方,分为本地仓库和远程仓库clone 克隆
,就是将远程仓库复制到本地push 推送
,就是将本地仓库代码上传到远程仓库pull 拉取
,就是将远程仓库代码下载到本地仓库commit 提交
,将文件提交到本地仓库add 添加
,将文件添加到到暂存区
Git 的工作流程
- 从远程仓库中 clone 代码到本地仓库或者本地新建一个仓库使用
git init
来初始化 - 从本地仓库中 checkout 创建分支代码,然后进行代码修改
- 在提交前先将代码 add 添加到到暂存区
- commit 提交到本地仓库。本地仓库中保存修改的各个历史版本
- 修改完成后,需要和团队成员共享代码时,将代码 push 到远程仓库