当前位置: 首页 > news >正文

01-DevOps代码上线-git入门及gitlab远程仓库

一、准备学习环境

10.0.0.71-gitlab            2c2g-20GB

10.0.0.72-jenkins         2c2g-20GB

10.0.0.73-sonarqube   1c1g-20GB

10.0.0.74-nexus          1c1g-20GB

10.0.0.75-dm               1c1g-20GB   (模拟写代码服务器)

        在centos系统中,本身就有git,如果没有yum安装一下git

[root@gitlab ~]# git --version
git version 1.8.3.1

二、git的使用

1,模拟一个代码目录

[root@gitlab ~]# mkdir -pv /xinjizhiwa/git_student 
[root@gitlab ~]# cd /xinjizhiwa/git_student

2,对代码目录进行git初始化

        你想要使用git,就需要先有一个git仓库,用来存放代码,所以,需要初始化出一个git仓库,初始化之后,该目录才成为【git本地仓库】

· 配置git本地仓库

用户名、用户邮箱、代码状态颜色开启

[root@gitlab git_student]# git config --global user.name 'xinjizhiwa'
[root@gitlab git_student]# git config --global user.email '626080079@qq.com'
[root@gitlab git_student]# git config --global color.ui true

· 查看git仓库配置信息

[root@gitlab git_student]# git config --list

· 初始化git本地仓库

[root@gitlab git_student]# git init

查看本地隐藏目录,有了【.git】就证明初始化成功了!~

至此,初始化git本地仓库,就完成了!~

3,代码的上线流程

        本地仓库的代码,有三种状态;

        只有提交到【本地仓库】的代码;才能够被推送到【远程仓库】;

· 模拟写一个代码

[root@gitlab git_student]# echo 'xinjizhiwa-v1.0' > xinjizhwa.txt

· 查看此时仓库的状态

        会看到一个【红色】的我们写的代码文件,证明是“草稿阶段”的代码;

[root@gitlab git_student]# git status

· 将代码提交到暂存区

[root@gitlab git_student]# git add .

再次查看代码状态,发现“它绿了”,就证明该代码,已经被提交到了【暂存区】;

· 将代码提交到本地仓库

        将暂存区的代码,提交到【本地仓库】,同时写个备注信息“v1.0”

[root@gitlab git_student]# git commit -m 'v1.0'

再次查看git仓库状态,什么都没有了~就证明,我们提交代码到【本地仓库】成功了;

[root@gitlab git_student]# git status

此时,代码提交到本地仓库,就完成了;

4,代码回滚

        在正常的工作当中,我们有一种极端情况,就是,代码写错了,但是,不小心还提交到了代码本地仓库,怎么办呐?这就涉及到了我们接下来的知识点,代码回滚;

· 查看下本地的代码文件

· 再重新编辑代码文件

追加一段代码到代码文件中,模拟,代码新版本;

[root@gitlab git_student]# echo 'xinjizhiwa-v2.0' >> xinjizhwa.txt

· 查看仓库状态

[root@gitlab git_student]# git status

发现代码文件的状态,又红了!~说明代码有修改,并还是草稿阶段;

· 将代码提交到本地仓库

[root@gitlab git_student]# git add .
[root@gitlab git_student]# git commit -m 'v2.0'

· 【重点】查看本地代码的版本

就是查看我们一共有多少个版本的代码;

[root@gitlab git_student]# git reflog

拓展:其实【git  reflog】是简写版本信息,想要显示全称,直接使用【git  log】

· 查看此时的代码

·【重点】回滚到指定版本

目前代码有两个版本,v1.0和v2.0;我们将代码回溯到v1.0;

[root@gitlab git_student]# git reset --hard 716ea3c

· 验证查看代码信息

        发现代码信息,内容中,回到了1.0的状态;

此时,在查看版本,发现,版本成了三个,有两个是用了一个id号,就证明,我们的过程是回溯的;

至此,我们的本地仓库的代码回滚,就学习完毕了;

5,git本地仓库分支branch

        由于开发一个项目,并不是一个人来完成的,需要研发团队的配合,于是,就有了“分支”的概念,用于院队研发协作使用;

        一般情况下,研发阶段端的代码,同属于一个分支,当项目开发结束后,会提交为一个master分支,作为已完成的项目提交。

· 查看当前代码的分支

[root@gitlab git_student]# git branch

可以看到,git仓库默认将代码都在master分支上;【*】代表当前所在的分支;

· 创建一个分支

穿件一个叫xinjizhiwa的分支;

[root@gitlab git_student]# git branch xinjizhiwa

再次查看分支

· 切换当前分支

[root@gitlab git_student]# git checkout xinjizhiwa

· 在新的分支下修改代码

[root@gitlab git_student]# echo 'xinjizhiwa-v3.0' >> xinjizhwa.txt

提交代码到本地仓库

[root@gitlab git_student]# git add .
[root@gitlab git_student]# git commit -m 'v3.0'
[root@gitlab git_student]# cat xinjizhwa.txt 
xinjizhiwa-v1.0
xinjizhiwa-v3.0

· 切换回master查看代码

        你会发现,两个分支中的代码,是不一样的;

[root@gitlab git_student]# git checkout master

· 将分支代码合并

        就是将xinjizhiwa分支上的代码,合并到当前master分支上;

[root@gitlab git_student]# git merge xinjizhiwa

此时查看代码,master分支也是最新的代码了;

至此,git本地仓库的分支,就学习完毕了;

三、自建远程仓库gitlab

1,安装部署gitlab远程仓库

· 下载gitlab软件包

本次学习,为了大家方便,给大家准备了软件包在百度云盘;

链接:https://pan.baidu.com/s/1PM_QIkTaBGFUPRy0Ybw45Q?pwd=6vc2 
提取码:6vc2

· 上传安转软件包

[root@gitlab ~]# rz -E
[root@gitlab ~]# yum -y localinstall gitlab-ce-15.9.3-ce.0.el7.x86_64.rpm

· 修改gitlab的配置文件

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb 
external_url 'http://gitlab.xinjizhiwa.com'
gitlab_rails['smtp_enable'] = false
gitlab_rails['registry_enabled'] = false
registry['enable'] = false
prometheus['enable'] = false
alertmanager['enable'] = false
node_exporter['enable'] = false
redis_exporter['enable'] = false
postgres_exporter['enable'] = false
gitlab_exporter['enable'] = false
prometheus_monitoring['enable'] = false

· 重启gitlab

[root@gitlab ~]# gitlab-ctl reconfigure

· 查看gitlab状态

[root@gitlab ~]# gitlab-ctl status | column -t

拓展:column  -t  表示列对齐;

2,gitlab浏览器页面操作

· 浏览器访问

注意,先本地hosts解析;

gitlab.xinjizhiwa.com

账号:root

密码:

查看密码

[root@gitlab ~]# cat /etc/gitlab/initial_root_password

· 汉化页面

【点击头像】-【preferences】

【Localization】-【langusge】-【chinsese】-【save change】-【刷新页面】

汉化成功

· 修改gitlab的密码

3,正式使用gitlab

· 创建项目

选择创建空白项目

· 查看项目列表

【点击logo】-【项目】就可以看到刚刚创建的项目了;

4,本地仓库连接远程仓库gitlab

· 生成linux本地秘钥

[root@gitlab ~]# ssh-keygen -t rsa -C 626080079@qq.com

#一路回车

· 复制本地秘钥-公钥

[root@gitlab ~]# cat /root/.ssh/id_rsa.pub

· 粘贴公钥到gitlab

· 本地添加远程仓库

[root@gitlab git_student]# git remote add origin git@gitlab.xinjizhiwa.com:gitlab-instance-ffdef71f/xinjizhiwa-web.git

· 查看本地的远程仓库列表

[root@gitlab git_student]# git remote -v

推送前,虚拟机也需要本地解析hosts,不然识别不了假域名

· 推送代码到远程仓库

推送master分支到远程仓库;

[root@gitlab git_student]# git push -u origin "master"

· 页面查看是否有这个分支和代码

5,git的标签

· 给当前分支创建标签

[root@gitlab git_student]# git tag -a "v1.0" -m "v1.0"

· 推送标签代码到远程仓库

[root@gitlab git_student]# git push -u origin --tag v1.0

6,gitlab的用户管理

        为了对企业当中的分属不同部门,不同人员的操作权限,gitlab给出了用户和用户组的功能。

· 创建用户

【点击目录】-【管理员】-【用户】

【点击新用户】

编辑新用户信息

【点击创建】

点击【编辑】

设置密码

· 创建用户组绑定用户

【目录】-【管理员】-【群组】-【新建群组】

设置名称-【保存】

【管理权限】

【邀请用户】

· 创建一个新项目

新建项目,绑定群组

· 新用户的主机免秘钥登录gitlab

生成秘钥

[root@dm dev]# ssh-keygen -t rsa -C xinjizhiwa@qq.com

复制秘钥公钥

开发新用户的集群,ssh免秘钥登录gitlab

· 新用户的主机本地解析一下假域名

· root用户主机推送代码到新项目

root用户添加项目到本地git

[root@gitlab git_student]# git remote  add  origin02 git@gitlab.xinjizhiwa.com:xinjizhiwa/xinjizhiwa-dev.git

root推送代码到新仓库

[root@gitlab git_student]# git push -u origin02 "master"

· 开发用户拉取gitlab仓库的项目代码

[root@dm dev]# git config --global user.name 'xinjizhiwa-dev'
[root@dm dev]# git config --global user.email 'xinjizhiwa@qq.com'
[root@dm dev]# git config --global color.ui true
[root@dm dev]# git config --list
user.name=xinjizhiwa-dev
user.email=xinjizhiwa@qq.com
color.ui=true

拉取仓库代码到本地

[root@dm dev]# git clone git@gitlab.xinjizhiwa.com:xinjizhiwa/xinjizhiwa-dev.git

进入代码目录

[root@dm dev]# cd xinjizhiwa-dev/

· 子账号模拟修改代码

[root@dm xinjizhiwa-dev]# echo "xinjizhiwa-v4.0" >> xinjizhwa.txt

提交修改好的代码到本地仓库

[root@dm xinjizhiwa-dev]# git add .
[root@dm xinjizhiwa-dev]# git commit  -m "v4.0" 

合并默认的master代码到xinjizhiwa分支

[root@dm xinjizhiwa-dev]# git branch xinjizhiwa
[root@dm xinjizhiwa-dev]# git branch 
* master
  xinjizhiwa
[root@dm xinjizhiwa-dev]# git checkout xinjizhiwa 
[root@dm xinjizhiwa-dev]# git merge master 
[root@dm xinjizhiwa-dev]# cat xinjizhwa.txt 
xinjizhiwa-v1.0
xinjizhiwa-v3.0
xinjizhiwa-v4.0

· 子账号推送代码到项目远程仓库

[root@dm xinjizhiwa-dev]# git push -u origin "xinjizhiwa"

· 登录新用户请求合并

· 再登录root合并代码

合并过后,你会发现,就剩下master了。合并成功

那么至此,项目组(群组),合并提交代码到远程仓库,管理员审核代码并合并成功,整套流程学习完毕了。

相关文章:

01-DevOps代码上线-git入门及gitlab远程仓库

一、准备学习环境 10.0.0.71-gitlab 2c2g-20GB 10.0.0.72-jenkins 2c2g-20GB 10.0.0.73-sonarqube 1c1g-20GB 10.0.0.74-nexus 1c1g-20GB 10.0.0.75-dm 1c1g-20GB (模拟写代码服务器) 在centos系统中&…...

EdgeX Foundry 安全模式安装部署

文章目录 一、安装准备1.官方文档2. 克隆服务器3.安装 Docker4.安装 docker-compose 二、安装部署1.docker-comepse2.启动 EdgeX Foundry3.访问 UI3.1. consul3.2. EdgeX Console EdgeX Foundry # EdgeX Foundryhttps://iothub.org.cn/docs/edgex/ https://iothub.org.cn/docs…...

网络安全-appcms-master

一、环境 gethub上面自己找appcms-master 二、分析一下源码以及闯关思路 首先是有一个函数循环以及函数过滤,我们的post会将我们所传的所有val值去进行一个循环,之后通过htmlspecialchars这个函数进行过滤和转换所以val值不能通过单双引号闭合注入的方…...

ThreadLocal 与 synchronized 区别

我的理解 目的都是为了一个大前提:操作内容的线程安全。 任务不同:synchronized 解决的是多线程下线程操作权限的问题,以及原子性的保证。通过对锁的竞争,达到对资源的访问有序。 ThreadLocal是解决的事多线程下资源的隔离问题,即…...

灵魂指针,教给(二)

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看,已成习惯 创作不易,多多支持! 目录 一、数组名的理解 二、使用指针访问数组 三、一维数组传参本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组…...

线程安全--浅谈Ad-hoc与加锁的区别

浅谈Ad-hoc 与加锁 两者要解决的都是对对象的语义混乱操作,即有个count进行累加操作。 我的理解/文心一言的反馈如下: 加锁是保证我们对同一个count在多线程下的访问有序,即“读写-修改-写入”具有原子性。 而Ad-hoc机制就是通过程序员自己定义一个私有…...

数据治理实战——翼支付金融板块业务数仓建设和数据治理之路

目录 一、数据治理背景 二、数据治理建设内容 2.1 组织协同 2.2 平台建设 2.3 数据应用治理 2.4 数据规范 2.5 数据安全 三、企业级数仓建设 3.1 调研阶段 2.2 平台护航 2.3 数仓分层 2.4 维度建模 2.4.1 维度建模四步曲 2.4.2 命名规范 2.4.3 资产沉淀 2.4.4 …...

[Buuctf] [MRCTF2020]Transform

1.查壳 64位exe文件,没有壳 2.用64位IDA打开 找到主函数,F5查看伪代码 从后往前看,有一个判断语句,是两个数组进行比较的,我们双击byte_40F0E0查看里面的内容 所以能够推出byte_414040的内容,byte_4140…...

【C++】C++模板基础知识篇

个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 泛型编程2. 函数模板2.1 函数模板概念2.2 函数模板格式2.3 函数模板的原理2.4 函数模板的实例化2.5 模板参数的匹配原则 3. 类模板3.1 类模板的定义格式3.2 类模板的实例化…...

golang 注释插件

Goanno插件 自动生成golang注释,该插件为 Intellij/Goland 中的 golang 提供自动生成注释 如何使用? control command / (for windows: control alt /)(生成注释)Right click -> Generate -> Goanno(生成注释&#x…...

Unity插件之天气系统UniStorm

首先呢,它是一款强大的动态昼夜天气系统,能够以较快的帧速率创建AAA级动态生成的天气、照明和天空,并且具有300多个可定制的组件,允许用户创建任何可以想象的环境。 第一步:他需要两个物体Camera摄像机、Player播放器…...

Java使用xlsx-streamer和EasyExcel解决读取超大excel文件数据处理方法

前言 最近有个项目在生产环境做数据导入时,发现开始执行导入任务会出现cpu狂飙的情况。几番定位查找发现是在读取excel的时候导致此问题的发生,因此在通常使用的为POI的普通读取,在遇到大数据量excel,50MB大小或数五十万行的级别的…...

智能驾驶规划控制理论学习04-基于车辆运动学的规划方法

目录 一、线性二自由度汽车模型(自行车模型) 1、二自由度模型概述 2、不同参考点下的状态空间方程 3、前向仿真 二、运动基元生成方法 1、杜宾斯曲线(Dubins Curve) 2、Reeds Shepp Curve 三、多项式曲线(Poly…...

一键查看:大厂网站都用了啥技术栈,有图有真相。

本次我们采用Wappalyzer插件来看下国内大厂的网站都采用了什么技术架构,文章最后由Wappalyzer的安装方法。 今日头条网站 淘宝网站 哔哩哔哩 京东商城 花瓣网 CSDN 国务院 网易 58同城 腾讯网 如何安装Wappalyzer 用Edge浏览器即可...

C语言-指针(下)

文章目录 前言    文章目录 前言 一、指针运算 1.指针-整数 2.指针-指针 3.指针关系运算 二、野指针 1.概念 2.野指针的成因 1.未初始化 2.指针越界访问 3.指针指向的空间释放 3.避免野指针 1.指针初始化 2.小心指针越界 3. 指针变量不再使用时,及时置NULL 总结 …...

尚硅谷JavaScript高级学习笔记

01 准备 JavaScript中函数是对象。我们后续描述构造函数的内存模型时,会将构造函数称为构造函数对象。 02 数据类型 typeof 运算符来查看值的类型,它返回的是类型的字符串值 会做数据转换 03 相关问题 04数据_变量_内存 05相关问题1 06相关问题2 …...

六、长短时记忆网络语言模型(LSTM)

为了解决深度神经网络中的梯度消失问题,提出了一种特殊的RNN模型——长短期记忆网络(Long Short-Term Memory networks, LSTM),能够有效的传递和表达长时间序列中的信息并且不会导致长时间前的有用信息被忽略。 长短时记忆网络原理…...

Filter过滤器+JWT令牌实现登陆验证

一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限,比如没有登陆时就不能进行其他操作。如果他需要进行其他操作,而在这之前他没有登陆过,服务端则需要将该请求拦截下来,这就需要用到过滤器,过滤器可以…...

SQL学习十八~十九

...

2024 AI 辅助研发的新纪年

随着人工智能技术的持续发展与突破,2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计,从软件开发到材料科学,AI正逐渐渗透到研发的各个环节,变革着传统的研发模式。在这一背景下,AI辅助研发不仅…...

【牛客】HJ87 密码强度等级 CM62 井字棋

题目一:密码强度等级 题目链接:密码强度等级_牛客题霸_牛客网 (nowcoder.com) 本题主要考察C语言中逻辑分支语句,基本语句以及对各种特殊字符 ,ASCII值以及条件表达中的逻辑运算符关系运算符各自功能的理解,以及基本使用&#x…...

【论文速读】 | DeGPT:通过大语言模型优化反编译器输出

本次分享论文为:DeGPT: Optimizing Decompiler Output with LLM 基本信息 原文作者:Peiwei Hu, Ruigang Liang, Kai Chen 作者单位:中国科学院信息工程研究所;中国科学院大学网络空间安全学院 关键词:反向工程&…...

【DP】蓝桥杯第十三届-费用报销

#include<iostream> #include<algorithm> #include<cstring> #include<set> #include<queue> using namespace std; const int N1010; int dp[N][5010];//dp[i][j]:选到第i个物品是否能取到价值j&#xff1b; int month[13]{0,31,28,31,30,31,30…...

15. C++泛型与符号重载

【泛型编程】 若多组类型不同的数据需要使用相同的代码处理&#xff0c;在C语言中需要编写多组代码分别处理&#xff0c;这样做显然太过繁琐&#xff0c;C增加了虚拟类型&#xff0c;使用虚拟类型可以实现一组代码处理多种类型的数据。 虚拟类型是暂时不确定的数据类型&#…...

老司机都懂的!【打赏】完美运营的最新视频打赏系统

完美运营的最新视频打赏系统优于市面上95%的打赏系统&#xff0c;与其他打赏系统相比&#xff0c;功能更加强大&#xff0c;完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介&#xff0c;经测试验证。成功搭建并可以正常进入…...

JavaWeb笔记 --- 二、Maven

二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies&#xff1a;依赖 依赖范围...

【C++】C++11---右值引用和移动语义

目录 1、什么是左值引用和右值引用2、左值引用与右值引用比较3、右值引用使用场景和意义4、右值引用引用左值的分析5、完美转发 1、什么是左值引用和右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习…...

消息队列-kafka-消息发送流程(源码跟踪) 与消息可靠性

官方网址 源码&#xff1a;https://kafka.apache.org/downloads 快速开始&#xff1a;https://kafka.apache.org/documentation/#gettingStarted springcloud整合 发送消息流程 主线程&#xff1a;主线程只负责组织消息&#xff0c;如果是同步发送会阻塞&#xff0c;如果是异…...

机器学习笔记 计算机视觉中的测距任务常见技术路线

一、计算机视觉中的测距任务 测距是计算机视觉中的一项关键任务,涉及测量物体和相机之间的距离。这些信息可用于多种应用,包括机器人、自动驾驶汽车和增强现实。测距技术有很多种,包括主动式和被动式,每种技术都有自己的优点和局限性。主动测距技术,例如飞行时间、结构光和…...

云计算 3月8号 (wordpress的搭建)

项目wordpress 实验目的&#xff1a; 熟悉yum和编译安装操作 锻炼关联性思维&#xff0c;便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…...