1.了解开发流程
1.软件开发⽣命周期大概都要经过一系列的流程。
项⽬⽴项—>需求调研—>需求拆解—>交给不同的开发进⾏开发—>测试环境测试—>部署⽣产环境。
1.环境都是什么?
开发环境:(开发电脑所使⽤的环境。⼀般看是什么⼯程师、java、go、python )
测试环境:⼀般由测试⼈员⾃⼰来部署,然后在该环境进⾏测试。(必不可少 —>系统、软件、版本等,都和⽣产环境⼀致。)
2.从开发—->⽤户中间涉及到⼀些环境?
开发环境 测试环境 预⽣产环境 ⽣产环境
3.代码上线⽅式?
1.⼿动上线 2.⾃动上线
4.⾃动上线需要预备⼀些知识?
持续集成 持续交付 持续部署
5.⾃动化上线实时流程 (对应⼯具)
预⽣产环境:测试到⽣产环境的⼀个过渡。 ( 连接的是⽣产库。 与⽣产的域名不同。test.jd.com) ,保证产品的质量。
⽣产环境:即线上环境,⽤户使⽤的环境,⼀般是运维在维护,其他⼈员⼏乎⽆权限。
2.环境和环境之间的代码是如何部署的?
⼿动:效率低、⼲扰因素多、不安全
1.rz的⽅式。 2.scp、xftp⽅式等等。 3.登陆到代码托管平台,svn pull 、 git pull。
手动缺陷: 1.全程运维参与、占⽤⼤量时间。 2.如果节点多,上线速度慢。 3.⼈为失误多、⽬录管理混乱。 4.回滚不及时,或者难以回退。
⾃动: 效率⾼、⼲扰较为少、安全
1.持续集成 ( 简单⼯作、产品能快速迭代、保证⾼质量的产品。)
持续集成是指开发人员在程序的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试
2.持续交付
持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境
3.持续部署了解即可:
在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。
滚动升级:摘⼀个节点,更新,然后接⼊,在摘掉另外⼀个节点、在更新、接⼊。
蓝绿发布:
git、gitlab (1 2 )
jenkins ( 3 4 5 )
git分布式版本控制软件
10.0.0.110 172.16.1.110 2g
第⼀阶段:单兵作战
yum install git -y
#你是谁,你的邮箱是,配置颜⾊
[root@git dy]# git config --global user.email "xxxxxx@qq.com"
[root@git dy]# git config --global user.name "oldxu"
[root@git dy]# git config --global color.ui true
[root@git ~]# mkdir dy
[root@git ~]# cd dy/
[root@git dy]# git init #将⽬录初始化为git的仓库
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "描述信息"
[root@git dy]# git log #查看提交的历史记录
第⼆阶段:开发新功能1
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "直播功能上线[master 7285d97] 直播功能上线
1 file changed, 1 insertion(+)
第三阶段:开发新功能2
加入交友功能
[root@git dy]# vim index.html
[root@git dy]#
[root@git dy]# git add .
[root@git dy]# git commit -m "直播功能上线"
[master 7285d97] 直播功能上线
1 file changed, 1 insertion(+)
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "约功能上线."
[master a901f68] 约功能上线.
1 file changed, 1 insertion(+)
有关部门约谈,下架。
[root@git dy]# git reset --hard 7285d97a63fe259a2fdcda7ef5bc91d5e400dc15 # 回到直播功能
HEAD 现在位于 7285d97 直播功能上线
[root@git dy]# cat index.html
#1.完成抖⾳短视频功能
...
...
#2.完成直播功能
...
...
可以继续上线约功能时。
[root@git dy]# git reflog
7285d97 HEAD@{0}: reset: moving to 7285d97a63fe259a2fdcda7ef5bc91d5e400dc15
a901f68 HEAD@{1}: commit: 约功能上线.
7285d97 HEAD@{2}: commit: 直播功能上线
0838f2b HEAD@{3}: commit: adasdas
83d2495 HEAD@{4}: commit (initial): 短视频功能开发完毕
[root@git dy]#
[root@git dy]# git reset --hard a901f68
HEAD 现在位于 a901f68 约功能上线.
[root@git dy]# cat index.html
#1.完成抖⾳短视频功能
...
...
#2.完成直播功能
...
...
#3.约功能完成
...
...
🌈本地仓库使用总结
- (本地仓库图解) 本地仓库
- 工作区
- 暂存区
- 版本库
- 本地仓库管理命令合集
git init #初始化⼀个⽬录为git版本库
git add . #将没有被管理的⽂件,加⼊git管理,添加到暂存区
git commit -m "描述" #将暂存区的⽂件提交到版本库中,进⾏版本的管理
git log #查看提交的历史记录
git reflog #查看git提交的所有历史记录
git status #查看当前的⽂件管理状态 ( 已提交 | 未提交 )
git reset --hard commitID #回退到指定的提交版本记录
*第四阶段:分支的作用详解
分⽀:
[root@git dy]# git branch game
[root@git dy]# git branch
game
* master
[root@git dy]# git checkout game
切换到分⽀ ‘game
[root@git dy]# cat index.html
#1.完成抖⾳短视频功能
...
...
#2.完成直播功能
...
...
#3.约功能完成
...
...
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "游戏完成20%-c3"
[game e2f86a8] 游戏完成20%-c3
1 file changed, 2 insertions(+)
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "游戏完成50%-c4"
[game 3b3f2fc] 游戏完成50%-c4
1 file changed, 1 insertion(+)
创建BUG分支,并修复bug
[root@git dy]# git branch bug
[root@git dy]# git checkout bug
切换到分⽀ ‘bug’
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "约bug修复-c5"
[bug 0861ff4] 约bug修复-c5
1 file changed, 1 insertion(+), 1 deletion(-)
[root@git dy]# git checkout master
切换到分⽀ ‘master’
[root@git dy]# git merge bug #站在master分⽀合并bug分⽀已提交的最新代码
更新 a901f68..0861ff4
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[root@git dy]# git checkout game
切换到分⽀ ‘game’
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "游戏完成100%"
[game d0790cc] 游戏完成100%
1 file changed, 1 insertion(+)
[root@git dy]# git merge master
[root@git dy]# vim index.html
[root@git dy]# git add .
[root@git dy]# git commit -m "bug修复-游戏-c8"
[game a9d322f] bug修复-游戏-c8
[root@git dy]# git checkout master
[root@git dy]# git merge game
更新 0861ff4..a9d322f
Fast-forward
index.html | 4 ++++
1 file changed, 4 insertions(+)
站在bug上执行: git merge master
——->> 将master分支的代码合并到bug分支
如何出现冲突,需要手动解决,生产中多人协同升时,注意和开发们沟通,消除冲突。
> 冲突问题如何解决: [https://blog.csdn.net/geeksoarsky/article/details/89063355](https://blog.csdn.net/geeksoarsky/article/details/89063355)
git流图解: <br />![](https://cdn.nlark.com/yuque/0/2021/png/1581532/1610349782486-b7c9953f-bbcc-44d5-9e6b-99e0d8cdacd1.png#align=left&display=inline&height=380&margin=%5Bobject%20Object%5D&originHeight=380&originWidth=614&size=0&status=done&style=stroke&width=614)
---
<a name="104e776d"></a>
## 第五阶段:👔协同工作 (个人环境 提交 git服务器)
进军三⾥屯买⼀栋楼作为办公点(公司敲完回家还能继续敲):<br />![](https://cdn.nlark.com/yuque/0/2020/jpeg/1581532/1593420152088-ae8b672d-ac72-4770-95ce-1467a312e0e1.jpeg#align=left&display=inline&height=304&margin=%5Bobject%20Object%5D&originHeight=608&originWidth=1066&size=0&status=done&style=stroke&width=533)
> 首先,准备中⼼服务器
> #gitee ( 开源的,注册即可使⽤ )
> ( Linux 模拟 家)
> ( MacOS | Windows-git-bash客户端 模拟三⾥屯 )
<a name="Q1T3R"></a>
#### 1. 安装windows的git客户端
<a name="OVfdv"></a>
#### 2. 注册⼀个gitee的账户,并登陆
2.1 第⼀天上班前在家上传代码 (Linux)
<a name="9jLsO"></a>
#### ![](https://cdn.nlark.com/yuque/0/2020/png/1581532/1593420152086-20e73dd3-9945-4e52-9e87-28ddcdcef67d.png#align=left&display=inline&height=132&margin=%5Bobject%20Object%5D&originHeight=176&originWidth=1046&size=0&status=done&style=stroke&width=785)
<a name="0AS4C"></a>
#### ![](https://cdn.nlark.com/yuque/0/2020/png/1581532/1593420152117-0a80731c-5762-4fe8-83f6-0a6684af5209.png#align=left&display=inline&height=582&margin=%5Bobject%20Object%5D&originHeight=775&originWidth=1022&size=0&status=done&style=stroke&width=767)
**<br />**git 快速上手操作** <br />![image.png](https://cdn.nlark.com/yuque/0/2020/png/1581532/1608468323126-00aa50cb-bb07-4e53-9262-7bd6994cd5f1.png#align=left&display=inline&height=427&margin=%5Bobject%20Object%5D&name=image.png&originHeight=569&originWidth=1431&size=46234&status=done&style=shadow&width=1073)
2.2 给远程仓库起别名(origin就是仓库的地址别名)<br /> ** **`**git remote add origin 远程仓库地址**`<br /> 2.3 向远程推送代码<br /> **`git push -u origin 分⽀`**
<a name="Xrld2"></a>
#### 3. 初次在公司新电脑下载代码(MacOS | Windows)
xudeMacBook-Pro:douyin xuliangwei$ `git clone `` `[`https://gitee.com/oldboy_oldxu/douyin.git`](https://gitee.com/oldboy_oldxu/douyin.git)<br />xudeMacBook-Pro:douyin xuliangwei$ `vim index.html` #编辑index⽂件<br />xudeMacBook-Pro:douyin xuliangwei$ `git add .`<br />xudeMacBook-Pro:douyin xuliangwei$ `git commit -m ""`<br />xudeMacBook-Pro:douyin xuliangwei$ `git push origin master`
<a name="wHgO0"></a>
#### 4. 下班回家继续写代码(Linux)
[root[@git ](/git ) dy]# `git pull origin master`
<a name="muFVK"></a>
####
<a name="DxMlI"></a>
#### 5. 如何推送其他分支代码
[root[@git ](/git ) dy]# `git checkout game`<br />[root[@git ](/git ) dy]# `vim index.html`<br />[root[@git ](/git ) dy]# `git add .`<br />[root[@git ](/git ) dy]# `git commit -m "game⼤改动"`<br />[root[@git ](/git ) dy]# `git push origin game`
<a name="RrshU"></a>
#### 6. 知识补充和总结
![](https://cdn.nlark.com/yuque/0/2020/jpeg/1581532/1593420152136-f92f8f95-8e45-4c41-b6d4-ffa3e16bc125.jpeg#align=left&display=inline&height=611&margin=%5Bobject%20Object%5D&originHeight=814&originWidth=804&size=0&status=done&style=none&width=603)<br />[root[@git ](/git ) dy]# `git checkout game`<br />[root[@git ](/git ) dy]# `vim index.html`<br />[root[@git ](/git ) dy]# `git add .`<br />[root[@git ](/git ) dy]# `git commit -m "game⼤改动"`<br />[root[@git ](/git ) dy]# `git push origin game`<br />`git pull origin master| dev | game #拉取代码,合并代码`
添加远程连接(别名)<br />`git remote add origin 地址`<br />`git remote -v`<br />`git remote remove origin #删除当前origin这个别名 (相当于本地版本库与中⼼版本库取消关联)`<br />推送代码<br />`git push origin 分⽀名称`<br />下载代码<br />**`git pull origin 分⽀名称`**
> 相当于
> git fetch origin 分⽀名称
> git merge origin/分⽀名称
<a name="xkXq9"></a>
## 第六阶段:补充
1.tag标签 ( commitID--->的别名 )<br />[root[@git ](/git ) dy]# `git tag -a v1.1 -m "周年活动"` #基于当前最新的commitid打标签<br />[root[@git ](/git ) dy]# `git tag`<br />v1.1
[root[@git ](/git ) dy]# `git push origin v1.1`<br />Username for '[https://gitee.com](https://gitee.com)': [xxxxx@qq.com](mailto:xxxxx@qq.com)<br />Password for '[https://xxxx@qq.com](https://xxxx@qq.com)@gitee.com':
[root[@git ](/git ) dy]# `git tag -a v0.5 c67f593 -m "游戏完成百分之百,做⼀个标签记录"`<br />[root[@git ](/git ) dy]# `git push origin v0.5`
> 本地仓库有文件,远程仓库也有文件,可能会起冲突,也有可能是分支没对应
> **正确姿势**:
>
1,git remote add origin 远程仓库地址 2,git pull origin master —allow-unrelated-histories 3,git branch —set-upstream-to=origin/master master 4,git push
<a name="6a1a02e2"></a>
### 免密登陆
1. URL中体现用户密码形式
> 原来的地址:[https://gitee.com/oldxu/treenb.git](https://gitee.com/oldxu/treenb.git)
> 修改的地址:[https://⽤户名:密码@gitee.com/oldxu/treenb.git](https://%E2%BD%A4%E6%88%B7%E5%90%8D:%E5%AF%86%E7%A0%81@gitee.com/oldxu/treenb.git)
`git remote add origin [https://⽤户名:密码@github.com/oldxu/treenb.git](https://%E2%BD%A4%E6%88%B7%E5%90%8D:%E5%AF%86%E7%A0%81@github.com/oldxu/treenb.git)`<br />`git push origin master`
2. ssh秘钥实现免密![](https://cdn.nlark.com/yuque/0/2020/jpeg/1581532/1593420152138-f30b3d9e-5095-43ce-81e3-02a9b952e6cd.jpeg#align=left&display=inline&height=791&margin=%5Bobject%20Object%5D&originHeight=791&originWidth=1640&size=0&status=done&style=none&width=1640)<br />![](https://cdn.nlark.com/yuque/0/2020/jpeg/1581532/1593420152208-ff460ced-2f1c-45bb-9628-36786c1d779e.jpeg#align=left&display=inline&height=692&margin=%5Bobject%20Object%5D&originHeight=692&originWidth=1636&size=0&status=done&style=none&width=1636)<br />将我们的公钥添加到gitee上,就可以实现免密登陆。
[root[@git ](/git ) dy]# `git remote -v`<br />origin [https://gitee.com/oldboy_oldxu/douyin.git](https://gitee.com/oldboy_oldxu/douyin.git) (fetch)<br />origin [https://gitee.com/oldboy_oldxu/douyin.git](https://gitee.com/oldboy_oldxu/douyin.git) (push)
[root[@git ](/git ) dy]# `git remote remove origin`<br />[root[@git ](/git ) dy]# `git remote -v`<br />[root[@git ](/git ) dy]# `git remote add origin git@gitee.com:oldboy_oldxu/douyin.git `
[root[@git ](/git ) dy]# `git remote -v`<br />origin [git@gitee.com](mailto:git@gitee.com):oldboy_oldxu/douyin.git (fetch)<br />origin [git@gitee.com](mailto:git@gitee.com):oldboy_oldxu/douyin.git (push)
[root[@git ](/git ) dy]# `git push origin master` #⽆需密码
<a name="c10efb31"></a>
### git中的.gitignore配置文件
#忽略⼀些⽂件,<br />[root[@git ](/git ) dy]# `cat .gitignore`
```bash
*.pyc
cache/*
config
https://github.com/github/gitignore
第七阶段:将之前写的Shell、ansible放到⼀个git仓库
1.创建gitee的仓库 2.选择性进⾏分⽀管理 ReadMe.md⽂件—->Master ( 简介,⼀打开这个项⽬就能看到的简介) shell代码 —->Shell分⽀ Ansible代码 —> Ansible分⽀ nginx代码—->nginx分⽀
如何拉去分支代码
#git 命令行拉取代码
-分支名称为develop 的分支
-代码地址为 XXX
git clone -b develop XXX #这样就能拉取到指定分支的代码了
#git 合并代码
-例如 master分支合并dev 分支
-首先切换到master分支
-然后合并dev分支
git checkout master
git merge dev