一.简介
使用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隐藏目录。
四.远程代码仓库gitee
0.通过官方地址注册装好注册账号
1.新建项目
初始化readme文件
说明:未初始化也可以,直接上传本地仓库代码到远程代码仓库。
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等
方式二:以只读的方式访问仓库,不能push上传,只支持clone与pull等只读操作
五.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