一.简介

使用git将代码推送到代码仓库如gitee、gitlab等、创建分支、拉取代码,代码拉取后可供测试人员测试和运维人员部署到生产环境中。

持续集成CI:开发的代码集成到代码仓库的过程
持续交付持续部署CD:从代码仓库拉取后部署到测试和生产环境
devops:开发的代码自动集成、自动交付与部署

常用的开发测试和生产环境:
开发环境:开发人员书写代码
测试环境:测试人员进行测试
准生产环境:与生产环境配置一致
生产环境:线上对外提供服务

二.git安装

#windows
https://github.com/git-for-windows/git/releases/download/v2.46.0.windows.1/Git-2.46.0-64-bit.exe
#centos/kylin 
yum -y install  git
#ubuntu
apt -y install git
#mac
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
brew install git

三.git的工作流程

工作空间 workspace:本地电脑上存放代码的目录,修改/增删后文件颜色为红色,git add后变为绿色。
暂缓区 staging:用于临时保存你的更改,准备提交到本地仓库中。
版本仓库 repository:存放历史版本的目录,里面包含.git隐藏目录。

代码发布之git与gitee_git

四.远程代码仓库gitee

0.通过官方地址注册装好注册账号

1.新建项目

代码发布之git与gitee_远程仓库_02

初始化readme文件

说明:未初始化也可以,直接上传本地仓库代码到远程代码仓库。

代码发布之git与gitee_代码发布_03

2.简单的命令行入门教程

Git 全局设置:

git config --global user.name "alibaby"
git config --global user.email "123@qq.com"

创建 git 仓库:

mkdir test-app
cd test-app
git init 
touch README.md
git add README.md
git commit -m "first commit"
#ssh
git remote add origin git@gitee.com:alibaby007/test-app.git
#或https
git remote add origin https://gitee.com/alibaby007/test-app.git
git push -u origin "master"

已有仓库?

cd existing_git_repo
#ssh
git remote add origin git@gitee.com:alibaby007/test-app.git
#或https
git remote add origin https://gitee.com/alibaby007/test-app.git
git push -u origin "master"

3.添加公钥

#生成公钥,keylin v10 为例 
ssh-keygen  #连续三个回车
#拷贝公钥内容
cat ~/.ssh/id_rsa.pub

方式一:ssh可免密push/pull等

代码发布之git与gitee_代码发布_04

方式二:以只读的方式访问仓库,不能push上传,只支持clone与pull等只读操作

代码发布之git与gitee_git_05

五.kylin v10为例演示git与gitee的交互操作

#kylin v10 安装git
yum -y install git
#配置git用户
git config --global user.name "alibaby"
git config --global user.email "123@qq.com"
git config --global color.ui true
#配置查看
git config --global --list
#创建代码目录并初始化,初始化后,在代码代码目录有一个隐藏的.git目录
mkdir -p  /data/app/
cd /data/app/
git init 
#配置远程仓库
#ssh
git remote add origin git@gitee.com:alibaby007/test-app.git
#或https
git remote add origin https://gitee.com/alibaby007/test-app.git
#远程仓库配置查看
git remote -v
#拉取远程仓库代码 说明:因为新建仓库后,初始化了redeme文件,所以先拉取一下
git clone git@gitee.com:alibaby007/test-app.git
#进入从远程仓库拉取到本地仓库的项目目录
cd test-app
#代码目录书写代码,以index.html为例
touch index.html
#状态查看,会看到未跟踪的文件index.html
git status
#提交代码到本地仓库
git add .
git commit -m "注释 第一次提交"
#状态查看
git status
#每次修改都要提交,并建议添加注释,没上传到远程仓库之前,在本地可随便修改
echo xxxx >>index.html
git add .
git commit -m "修改xxxx,第二次提交"
#状态查看
git status
#上传本地代码到远程仓库
git push -u origin "master"
#打标签 标签名V1.0
git tag -a "V1.0" -m "V1.0发布版"
#上传标签到远程仓库
git push origin "V1.0"

六.分支管理

git中的分支是指从主代码库master中分开的一个独立开发线,在不影响主分支的情况下进行并行开发和测试新的功能、解决bug和安全问题等。git分支的一般分类:

主分支 Master branch:默认的主要分支,可用于上线的稳定版本,更改需要经过严格的测试和审查。
开发分支 Develop branch:从主分支分离出来的分支,用于进行新功能的开发,开发完成后需要合并到主分支。
特性分支 Feature branch:从开发分支分离出来的分支,用于开发一个特定的功能,开发完成后合并回开发分支。
发布分支 Release branch:从开发分支分离出来的分支,用于准备项目的发布版本,开发完成后合并回主分支和开发分支。
修复分支 Hotfix branch:从主分支分离出来的分支,在修复错误后被合并回主分支和开发分支。

分支管理

#查看分支
git branch 
#创建分支 dev
git branch dev
#切换到dev分支
git branch 
git checkout dev
#修改代码
echo asdfg > index.html 
#提交代码
git add .
git commit -m "asdfg"
#合并分支
git checkout master 
git merge dev
#推送到远端仓库
git push -u origin master 
git push origin dev

七.gitee故障处理 模拟出错现象

1.远程仓库先修改index.html,本地仓库后修改index.html,添加后提交,上传本地代码到远程仓库,会报什么错?

#远程仓库index.html先被其他人员修改
#本地仓库后做的操作
echo 123456 >index.html 
git add .
git commit -m "123456"
git push -u origin "master"

报错:! [rejected]      master -> master (fetch first)

#提交本地代码到远程仓库出错
git push -u origin "master"
#报错内容如下
To gitee.com:alibaby007/test-app.git
! [rejected]        master -> master (fetch first)
error: 推送一些引用到 'gitee.com:alibaby007/test-app.git' 失败
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

解决:

#获取远端更新
git fetch origin
#将远端仓库更新与本地仓库合并
git merge origin/master
######################################
#自动合并 index.html
#冲突(内容):合并冲突于 index.html
#自动合并失败,修正冲突然后提交修正的结果。
######################################
git add .
git commit -m "注释内容XXXX"
git push -u origin "master"

2.本地新建一个目录,未clone项目,本地仓库后修改index.html,添加后提交,上传本地代码到远程仓库,会报什么错?

#本地新建一个目录
mkdir -p /data/app/branch-test
cd /data/app/branch-test
#本地仓库后做的操作
echo ABCD >>index.html 
git add .
git commit -m "ABCD"
#git status会看到未跟踪的文件../test-app/
git status
git push -u origin "master"

报错与上面的一样

#获取远端更新
git fetch origin
#将远端仓库更新与本地仓库合并
git merge origin/master

报错2:fatal: 拒绝合并无关的历史

解决:

cd /data/app/branch-test
git clone git@gitee.com:alibaby007/test-app.git
cd test-app
mv ../index.html .
git add .
git commit -m "ABCD"
git push -u origin "master"

3.在上一步的基础上,本地仓库后修改index.html,不add/commit,上传本地代码到远程仓库,会报什么错?

cd /data/app/test-app
echo 1qaz >index.html
#未add/commit,直接获取远端更新
git fetch origin
#将远端仓库更新与本地仓库合并
git merge origin/master
#提示:请在合并前提交或贮藏您的修改。正在终止
git add .
git commit -m "注释"
git push -u origin master

报错3: ! [rejected]        master -> master (non-fast-forward)

#提交本地代码到远程仓库出错
git push -u origin "master"
#报错内容如下
To gitee.com:alibaby007/test-app.git
 ! [rejected]        master -> master (non-fast-forward)
error: 推送一些引用到 'gitee.com:alibaby007/test-app.git' 失败
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

解决:

cd /data/app/test-app
git add .
git commit -m "注释"
git push -u origin master
git fetch origin
git merge origin/master
git push -u origin master