1.了解开发流程

1.软件开发⽣命周期大概都要经过一系列的流程。

项⽬⽴项—>需求调研—>需求拆解—>交给不同的开发进⾏开发—>测试环境测试—>部署⽣产环境。 71. gitlab------gitlab代码托管平台部署 - 图1 image.png

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.持续集成 ( 简单⼯作、产品能快速迭代、保证⾼质量的产品。)
持续集成是指开发人员在程序的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试

71. gitlab------gitlab代码托管平台部署 - 图3
2.持续交付
持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境
71. gitlab------gitlab代码托管平台部署 - 图4
3.持续部署了解即可:
在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。

71. gitlab------gitlab代码托管平台部署 - 图5

滚动升级:摘⼀个节点,更新,然后接⼊,在摘掉另外⼀个节点、在更新、接⼊。
蓝绿发布:
git、gitlab (1 2 )
jenkins ( 3 4 5 )
git分布式版本控制软件

71. gitlab------gitlab代码托管平台部署 - 图6

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 #查看提交的历史记录
71. gitlab------gitlab代码托管平台部署 - 图7

第⼆阶段:开发新功能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(+)
71. gitlab------gitlab代码托管平台部署 - 图8
有关部门约谈,下架。
[root@git dy]# git reset --hard 7285d97a63fe259a2fdcda7ef5bc91d5e400dc15 # 回到直播功能
HEAD 现在位于 7285d97 直播功能上线
[root@git dy]# cat index.html

  1. #1.完成抖⾳短视频功能
  2. ...
  3. ...
  4. #2.完成直播功能
  5. ...
  6. ...

可以继续上线约功能时。
[root@git dy]# git reflog

  1. 7285d97 HEAD@{0}: reset: moving to 7285d97a63fe259a2fdcda7ef5bc91d5e400dc15
  2. a901f68 HEAD@{1}: commit: 约功能上线.
  3. 7285d97 HEAD@{2}: commit: 直播功能上线
  4. 0838f2b HEAD@{3}: commit: adasdas
  5. 83d2495 HEAD@{4}: commit (initial): 短视频功能开发完毕

[root@git dy]#
[root@git dy]# git reset --hard a901f68
HEAD 现在位于 a901f68 约功能上线.
[root@git dy]# cat index.html

  1. #1.完成抖⾳短视频功能
  2. ...
  3. ...
  4. #2.完成直播功能
  5. ...
  6. ...
  7. #3.约功能完成
  8. ...
  9. ...

🌈本地仓库使用总结

  • (本地仓库图解) 本地仓库
    • 工作区
    • 暂存区
    • 版本库

71. gitlab------gitlab代码托管平台部署 - 图9

  • 本地仓库管理命令合集
    1. git init         #初始化⼀个⽬录为git版本库
    2. git add .        #将没有被管理的⽂件,加⼊git管理,添加到暂存区
    3. git commit -m "描述"  #将暂存区的⽂件提交到版本库中,进⾏版本的管理
    4. git log        #查看提交的历史记录
    5. git reflog      #查看git提交的所有历史记录
    6. git status      #查看当前的⽂件管理状态 ( 已提交 | 未提交 )
    7. git reset --hard commitID #回退到指定的提交版本记录

*第四阶段:分支的作用详解

游戏功能&bug修复

分⽀:

71. gitlab------gitlab代码托管平台部署 - 图10

[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. #1.完成抖⾳短视频功能
  2. ...
  3. ...
  4. #2.完成直播功能
  5. ...
  6. ...
  7. #3.约功能完成
  8. ...
  9. ...

[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(+)

  • 问题:

    merge: 注意谁合并谁? ```javascript

    站在master上执行: git merge bug

    ——>> 将bug分支的代码合并到master

站在bug上执行: git merge master

——->> 将master分支的代码合并到bug分支

如何出现冲突,需要手动解决,生产中多人协同升时,注意和开发们沟通,消除冲突。

  1. > 冲突问题如何解决: [https://blog.csdn.net/geeksoarsky/article/details/89063355](https://blog.csdn.net/geeksoarsky/article/details/89063355)
  2. 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)
  3. ---
  4. <a name="104e776d"></a>
  5. ## 第五阶段:👔协同工作 (个人环境 提交 git服务器)
  6. 进军三⾥屯买⼀栋楼作为办公点(公司敲完回家还能继续敲):<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)
  7. > 首先,准备中⼼服务器
  8. > #gitee ( 开源的,注册即可使⽤ )
  9. >     Linux 模拟 家)
  10. >     MacOS | Windows-git-bash客户端 模拟三⾥屯
  11. <a name="Q1T3R"></a>
  12. #### 1. 安装windows的git客户端
  13. <a name="OVfdv"></a>
  14. #### 2. 注册⼀个gitee的账户,并登陆
  15.   2.1 第⼀天上班前在家上传代码 (Linux)
  16. <a name="9jLsO"></a>
  17. #### ![](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)
  18. <a name="0AS4C"></a>
  19. ####  ![](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)
  20. **<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)
  21.  2.2 给远程仓库起别名(origin就是仓库的地址别名)<br />  ** **`**git remote add origin 远程仓库地址**`<br /> 2.3 向远程推送代码<br />  **`git push -u origin 分⽀`**
  22. <a name="Xrld2"></a>
  23. #### 3. 初次在公司新电脑下载代码(MacOS | Windows)
  24. 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`
  25. <a name="wHgO0"></a>
  26. #### 4. 下班回家继续写代码(Linux)
  27. [root[@git ](/git ) dy]# `git pull origin master`
  28. <a name="muFVK"></a>
  29. ####
  30. <a name="DxMlI"></a>
  31. #### 5. 如何推送其他分支代码
  32. [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`
  33. <a name="RrshU"></a>
  34. #### 6. 知识补充和总结
  35. ![](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 #拉取代码,合并代码`
  36. 添加远程连接(别名)<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 分⽀名称`**
  37. > 相当于
  38. > git fetch origin 分⽀名称
  39. > git merge origin/分⽀名称
  40. <a name="xkXq9"></a>
  41. ## 第六阶段:补充
  42. 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
  43. [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':
  44. [root[@git ](/git ) dy]# `git tag -a v0.5 c67f593 -m "游戏完成百分之百,做⼀个标签记录"`<br />[root[@git ](/git ) dy]# `git push origin v0.5`
  45. > 本地仓库有文件,远程仓库也有文件,可能会起冲突,也有可能是分支没对应
  46. > **正确姿势**:
  47. >

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

  1. <a name="6a1a02e2"></a>
  2. ### 免密登陆
  3. 1. URL中体现用户密码形式
  4. > 原来的地址:[https://gitee.com/oldxu/treenb.git](https://gitee.com/oldxu/treenb.git)
  5. > 修改的地址:[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)
  6. `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`
  7. 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上,就可以实现免密登陆。
  8. [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)
  9. [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 `
  10. [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)
  11. [root[@git ](/git ) dy]# `git push origin master` #⽆需密码
  12. <a name="c10efb31"></a>
  13. ### git中的.gitignore配置文件
  14. #忽略⼀些⽂件,<br />[root[@git ](/git ) dy]# `cat .gitignore`
  15. ```bash
  16. *.pyc
  17. cache/*
  18. config
  19. 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