Git与GitLab的企业实战--尚硅谷git课程

Git与GitLab的企业实战

第1章 Git概述

Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

Git易于学习,占地面积小,性能极快。 它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion(svn)、CVS、Perforce和ClearCase等版本控制工具。

1. 何为版本控制

版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。

版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

2. 为什么需要版本控制

1.管理代码,可以控制到每一个代码是谁写的--方便后期排除问题

2.统计工作流,记录开发的流程,方便回退

3.从个人开发到团队开发,可以创建不同分支并行开发,统一进行管理

第2章 Git安装

官网地址: https://git-scm.com/或Releases · git-for-windows/git · GitHub

查看GNU协议,可以直接点击下一步。

Standalone Installer和Portable (“thumbdrive edition”)区别

Standalone Installer:

这是最常见的安装方式,会将 Git 安装到 Windows 系统目录中,同时添加 Git Bash、Git GUI、Git CMD 等工具。
安装后,你可以在命令行或 Git Bash 中直接使用 Git 命令。
适用于大多数用户,特别是在本地机器上进行日常开发时。
Portable (“thumbdrive edition”):

这个版本是可便携的,适合在 USB 驱动器等可移动媒体上携带。
安装过程不会将 Git 添加到系统目录中,而是将所有文件都放在安装目录中。
适用于需要在不同计算机之间移动的情况,你可以将整个 Git 工具和仓库都放在一个移动设备上,方便在不同机器上使用相同的 Git 版本。
选择哪个版本主要取决于你的使用场景:

如果你只在自己的机器上进行开发,并且不需要在不同的机器上携带 Git,那么 “Standalone Installer” 是一个不错的选择。
如果你经常在不同的计算机上工作,或者需要在移动设备上携带 Git,那么 “Portable (“thumbdrive edition”)” 可能更适合你。
无论你选择哪个版本,它们都提供了相同的 Git 功能,只是安装方式和一些配置略有不同。

选择Git安装位置,要求是非中文并且没有空格的目录,然后下一步。

Git选项配置,推荐默认设置,然后一直下一步。

点击Finsh按钮,Git安装成功!

右键任意位置,在右键菜单里选择Git Bash Here即可打开Git Bash命令行终端。

在Git Bash终端里输入git --version查看git版本,如图所示,说明Git安装成功。

第3章 Git常用命令

命令名称作用
git config --global user.name 用户名设置用户签名
git config --global user.email 邮箱设置用户邮箱
git init初始化本地库
git status查看本地库状态
git add 文件名添加到暂存区
git commit -m "日志信息" 文件名提交到本地库,添加备注
git reflog查看历史记录
git reset --hard 版本号版本穿梭

第4章 Git集成IDEA常用操作

这里使用Gitee操作  其他GitHub基本一致

1 将代码提交到远程仓库 

 自己写了一段代码后,想要将自己的代码提交到远程仓库中进行管理

1)创建一个项目

 如果不显示的化,就初始化一些git工程

 2)安装gitee插件

3)添加gitee的账户

  

邮箱可以在gitee中设置

 

4) 将代码提交到远程仓库

提交成功 

2 将其他人代码拉取下来

 拉取其他人在远程仓库写好的代码

1)创建一个文件夹然后打开命令窗口

2)找到项目复制地址

输入命令

git clone 地址 

3.IDEA右下角常用按钮

第5章 GitLab的部署与使用

1.为什么使用GitLab-开发运维一体化

①开源

②可以自己本地部署,安全性高

③功能强大,包含自动部署流水线功能

2. 部署安装GitLab

使用git,还需要一个远程代码仓库。常见的github、gitee这种远程代码仓库,公司中一般不会使用,因为他们是使用外网的,不够安全。一般企业都会搭建一个仅内网使用的远程代码仓库,最常见就是 GitLab。

2.1 安装部署

GitLab一般由公司的运维人员安装部署,开发人员只需要申请账号和相应权限即可,在这里我们在虚拟机上自己安装GitLab社区版体验一下。

2.1.1 安装准备

1)需要开启ssh:(已开启可跳过)

sudo systemctl status sshd
sudo systemctl enable sshd
sudo systemctl start sshd

2)关闭防火墙

sudo systemctl stop firewalld
sudo systemctl status firewalld
2.1.2 rpm 包安装

1)上传安装包

下载地址:Nexus Repository Manager

安装包较大,建议下载好手动上传服务器。这里上传到/software下

百度网盘:

链接:https://pan.baidu.com/s/1dwFH5DtSbG7-VQwZKI_RxA?pwd=duo1 
提取码:duo1 

2)编写安装脚本

cd /sofwin
利用文件工具将rpm安装包拉进去

脚本内容如下:

sudo yum install -y curl policycoreutils-python openssh-server perl

sudo rpm -ivh gitlab-jh-16.6.1-jh.0.el7.x86_64.rpm

安装完毕后是这样

3)修改external_url

sudo vim /etc/gitlab/gitlab.rb

进入编辑器后

输入/external_url 回车  然后输入n下一个一直找(N是上一个)

找到标红的改成自己虚拟机地址然后保存退出 

4)修改host(可选  如果不想使用80)

编辑gitlab.yml

[atguigu@hadoop104 ~]$ sudo vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml.example

找到gitlab.host修改为如下内容

  gitlab:

    \## Web server settings (**note:** host is the FQDN, do not include http://)

    host: hadoop104

    port: 80

    https: false

保存退出

修改文件名称

[atguigu@hadoop104 ~]$ sudo mv /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml.example /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml

5)启动初始化

执行过程大概需要3分钟

sudo gitlab-ctl reconfigure
 

6)重装需要彻底卸载

1 卸载gitlab

[atguigu@hadoop104 opt]$ sudo rpm -e gitlab-jh-16.6.1

2 删除gitlab文件

[atguigu@hadoop104 opt]$ sudo rm -rf /etc/gitlab
[atguigu@hadoop104 opt]$ sudo rm -rf /var/opt/gitlab
[atguigu@hadoop104 opt]$ sudo rm -rf /opt/gitlab

3 重装如果卡在sudo gitlab-ctl reconfigure配置命令上,可以使用另外一个窗口执行

sudo systemctl restart gitlab-runsvdir
2.1.3 启停命令

当出现这个子后代表初始化成功了,然后进行启动

1)启动命令

sudo gitlab-ctl start

2)停止命令

sudo gitlab-ctl stop
2.1.5 修改 root 密码

1)访问Web页面

默认使用80端口,直接浏览器输入安装服务器的hostname或ip:http://192.168.110.210/

2)查看root密码

账号root,密码将随机生成并在 /etc/gitlab/initial_root_password 中保存24 小时:

sudo cat /etc/gitlab/initial_root_password

​

修改密码:

2.1.6 设置简体中文

保存后刷新一下,就变成中文了

3. 使用GitLab完成团队管理

去到一家公司,应该是已经有了GitLab平台,运维人员拥有root管理员账号。而作为一名普通的开发人员,你的leader和同事都拥有各自的GitLab账号和不同权限。入职后,你只需要申请开通GitLab账号和对应权限,不需要你来操作。

3.1 创建用户

为了更符合公司实际,我们假设有一个研发组,研发人员 zhangsan,项目组组长wangwu

申请一个wangwu的管理员账号

创建一个zhangsan 普通员工的账号:

设置密码同上

3.2 创建群组

在gitlab里,可以创建出组、组下的子组。在小公司里可以看见gitlab里边会创建出后端,大数据等等一系列组。尽量不要使用中文创建组名, 可以在组信息中的备注编写中文描述以及中文组名, 组内人员名称也尽量用全拼命名。

对于人员权限以及角色的控制也比较简单,有如下五种:

Ø Owner:最高权限,谁去创建组,这个组就被谁拥有,它可以开除管理员,但管理员无法操作owner的角色。

Ø Maintainer:(管理员-只是具备sudo权限的用户)管理员一般是给小组的组长,或者是给产品线的总监设定。

Ø Developer:是干活的人,就是写代码的程序员,可以进行代码的上传以及代码的下载,不能下载其他的组内的代码,只能下载它们组的代码。

Ø Repoter:比如现在有需求,其他组的大牛到我们组过来指导工作,要审视我们的代码,人家就提出需要一个权限,我不能给它developer因为它会改你代码,其他组的人不能改我们组的代码,所以就给一个repoter权限,他只能看,只读权限。

Ø guest:不用看,匿名,直接去掉。一般出现在从ldap中把离职人员的信息删掉,再去gitlab查这个人的时候,它就是一个guest用户(匿名)需要再到gitlab把它删掉(不删也没事)。

下面,我们假设研发部群组是rdc,下属后端组、前端组、大数据组等子群组:

1)创建研发中心群组rdc

使用wangwu管理员创建群组

2)创建大数据组

在研发中心组下,再创建一个大数据组(当然,其他还会有后端组、前端组等):

当然,根据公司情况还可以进一步在数据组下面细分子组(比如:离线、实时、湖等),这里我们就不再细分。

创建大数据组:

将zhangsan添加为普通的开发人员:

 

现在我们就有一个顶级群组rdc,其下有一个子群组bigdata,组内有管理员wangwu,开发人员zhangsan。

4.使用IDEA兼容GitLab

1)安装 GitLab 插件

2) 添加用户

 

3)获取 GitLab 个人令牌

创建后,可以查看和复制生成的token:

4)设置ssh免密登录

ssh-keygen -t rsa -C zhangsan@163.com

输入后一直点回车就可以   当出现我模糊那种框框就可以了

找到秘钥 在c盘用户下的ssh文件夹

将ssh秘钥添加到用户上 

5)修改默认分支的保护策略(必须是root的用户)

6)推送

成功:

注意:如果之前是git项目后没有vcs,变成git了可以进行恢复

5 在GitLab上创建项目

1)新建项目

2)选择一个适合的创建方式

创建完毕后,该组下的成员自动都在这个项目里 

第6章 企业项目构建与开发分支

1. GitFlow工作流介绍

在项目开发过程中使用 Git 的方式常见的有:

1.1 集中式工作流

所有修改都提交到 Master 这个分支。比较适合极小团队或单人维护的项目,不建议使用这种方式。

1.2 功能开发工作流

功能开发应该在一个专门的分支,而不是在 master 分支上。适用于小团队开发。

1.3 GitFlow工作流

公司中最常用于管理大型项目。为功能开发、发布准备和维护设立了独立的分支,让发布迭代过程更流畅。

1.4 Forking工作流

在 GitFlow 基础上,充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。一般用于跨团队协作、网上开源项目。

2. 各分支功能介绍

2.1 主干分支 master

主要负责管理正在运行的生产环境代码,永远保持与正在运行的生产环境完全一致。为了保持稳定性一般不会直接在这个分支上修改代码,都是通过其他分支合并过来的。

2.2 开发分支 develop

主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。

2.3 功能分支 feature

为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。 开发完成后会合并到开发分支。

2.4 准生产分支(预发布分支) release

较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可以视情况删除。

2.5 bug 修理分支 hotfix

主要负责管理生产环境下出现的紧急修复的代码。 从主干分支分出,修复完毕并测试上线后,并回主干分支和开发分支。并回后,视情况可以删除该分支。

3. 分支管理

3.1 不同分支的提交与合并

(1)新建分支和切换分支

创建一个feature分支

方案1:使用idea直接创建分支然后提交

方案2:在GitLab中创建分支

切换到feature分支

(2)不同分支提交代码与合并

首先在feature分支编写第一个模块的模拟代码,并提交

 

(3)合并feature到feature2分支

将分支改一下

审查测试通过之后,完成合并

第7章 冲突提交

实际单个模块的开发往往不是单独一个人来进行操作,当多个人协同开发相同的一个项目时,就会涉及到提交冲突的问题。

1. 不同人修改不同文件

先pull

Git会智能识别,采用merge合并命令,拉取远端文件到本地进行合并。

然后commit

然后push

2. 不同人修改同文件的不同区域

先pull

Git会智能识别,采用merge合并命令,拉取远端文件到本地进行合并。

然后commit

然后push

3. 不同人修改同文件的相同区域

先pull

无法直接采用merge命令,需要人为判断哪些作为最终的结果来保留

然后回弹出框

中间是处理后的代码

4. 同时变更文件名和文件内容

先pull

然后commit

然后push

5. 不同人把同一文件改成不同的文件名

先pull  

会导致报错,之后需要用户自己解决保留哪些文件。

(5)使用命令解决最终的冲突

C:\mybigdata\project\gitlab_demo>git status
#删除掉报红找不到的文件
C:\mybigdata\project\gitlab_demo>git rm src/main/java/com/atguigu/Module1Plus.java

然后commit

最后重新选择正确的代码push到仓库

6.自己工作中常用命令提交

1.创建分支

git checkout -b 分支名

2.切换分支

git checkout 分支名

3.合并  将dev的内容合并到dev-wt中  (这里不涉及审核什么的时候用)

git checkout dev-wt

git pull 

git merge dev

4.一个分支dev的一次提交合并到另一个分支dev-wt中

git checkout dev

//先将dev-wt的最新代码拉取

git pull origin dev-wt       

//解决冲突后进行提交

记录下提交的标识

//切换到要提交的复制 dev-wt

git checkout dev-wt

//输入dev提交分支的标识 

git cherry-pick c7cca26d48c52583efa75a673970a6e87ad7d6d6

//提交

git push

3和4区别?

3是全部进行合并  

4是对一小部分进行合并

第8章 GitLab功能拓展

这块没进行测试 有兴趣的可以试试

流水线,这个我们一般都是公司自己封装好了

前端,后端提交到git上就自动化部署---跟这个差不多。  (哈哈哈,这个我只会用,暂时不太懂)  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/753431.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IEEE JSTSP综述:从信号处理领域分析视触觉传感器的研究

触觉传感器是机器人系统的重要组成部分,虽然与视觉相比触觉具有较小的感知面积,但却可以提供机器人与物体交互过程中更加真实的物理信息。 视觉触觉传感是一种分辨率高、成本低的触觉感知技术,被广泛应用于分类、抓取、操作等领域中。近期&a…

什么是指令微调(LLM)

经过大规模数据预训练后的语言模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。 指令微调是相对“预训练”来讲的,预训练的时…

UG_NX11.0之Windows11中安装出错及解决方法

UG_NX11.0之Windows11中安装出错及解决方法 文章目录 UG_NX11.0之Windows11中安装出错及解决方法1. 安装出错2. 解决方法1. 设置以兼容性模式运行2. 配置环境变量 3. 再次安装问题解决4. 安装后可删除配置的环境变量(可选) 1. 安装出错 以管理员身份运行Launch.exe,如下 点击D…

浅谈逻辑控制器之while控制器

浅谈逻辑控制器之while控制器 “While控制器”是一种高级控制结构,它允许用户基于特定条件来循环执行其下的子采样器或控制器,直至该条件不再满足。本文旨在详细介绍While控制器的功能、配置方法、使用场景以及实践示例,帮助测试工程师高效利…

浅谈红队攻防之道-DLL注入上线cs

等我熬过这一段狼狈,一个人尝尽孤独的滋味,我会笑着与这个世界和解 0x1 DLL注入概念 DLL注入(DLL Injection)是一种计算机编程技术,它可以强行使另一个进程加载一个动态链接库(DLL)以在其地址空间内运行指定代码。常见用途是改变原先程序的…

C++Primer Plus 第十四章代码重用:14.4.4 数组模板示例和非类型参数2

14.4.4 数组模板示例和非类型参数 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右…

SpringBoot整合Solr进行搜索(简单)

SpringBoot整合Solr进行搜索 创建SpringBoot项目pom中加入Solr依赖配置 Solr创建实体编写一个简单的ID查询打印结果 参考文章 创建SpringBoot项目 这里基于aliyun提供的快速构建一个项目。我们这主要是整合Solr。 pom中加入Solr依赖 maven下载地址 pom中加入以下内容&#x…

线程版服务器实现(pthread_server)

用到的所有方法所需要的参数可以在wrap.c文件中查询&#xff0c;wrap中找不到的直接通过man手册查询 1.首先介绍一下我自己写的包裹文件&#xff0c;里面有各种在可能要用到的方法 wrap.c: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #…

软考《信息系统运行管理员》-1.4 常见的信息系统

1.4 常见的信息系统 常见的信息系统综述 财务系统 财务信息系统会计信息系统 办公自动化系统业务处理系统生产管理系统ERP系统客户关系管理系统人力资源系统 会计信息系统 主要任务是保证记账的正确性。 订单处理子系统库存子系统会计应收/应支系统总账子系统 财务信息系…

effective java (1)(考虑使用!)静态工厂方法代替构造方法

只是目前阶段 对本书第一章内容的浅显认知&#xff0c;说实话 这一章 我看了4遍左右&#xff0c;每一遍感觉都不一样 他的创建模式 有时候像设计模式&#xff0c;但作者已经在原文中描述&#xff0c;它并不等价于 设计模式 我们正常 创建一个年级类 是长这样的 我们不写成标准…

机械拆装-基于Unity-总体设计

前言 在工业设计和制造领域&#xff0c;零部件的拆装技术是一个重要的应用场景&#xff0c;比如我们在工程训练课程中经历的摩托车发动机拆装课程&#xff0c;是机械类学生的必修课程。虚拟拆装系统模拟和仿真了模型的拆装过程&#xff0c;虽然SolidWorks等机械设计软件能够解决…

Splashtop 的屏幕录制功能如何提高 IT 合规性

在当今的数字时代&#xff0c;随着远程办公的普及以及监管要求和网络安全威胁的加剧&#xff0c;IT 副总裁、首席信息官&#xff08;CIO&#xff09;等 IT 管理人员面临着一系列独特挑战。 各组织在远程支持运营中要全力维护合规性、提高安全性并坚持问责制&#xff0c;技术解…

瓦罗兰特新赛季更新资讯 瓦罗兰特新赛季免费加速器

瓦罗兰特新赛季来喽&#xff0c;这是一款由拳头开发的免费第一人称射击游戏&#xff0c;游戏凭借其独特的玩法和丰富的英雄选择吸引了大量玩家。 我们可以在游戏中选择自己喜欢的角色出场与敌人进行对战&#xff0c;而且每一个角色都有自己独特的道具以及技能&#xff0c;使用好…

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下&#xff0c;传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力&#xff0c;众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系&#xff0c;自2021年8月起接…

高效管理客户的秘诀:企业如何建立稳固的客户关系

如今的竞争&#xff0c;从商业模式、产品、服务到销售环节&#xff0c;竞争已经不再是单一层面的&#xff0c;而是全方位的&#xff0c;企业需要打造全价值链竞争优势。在这个过程中&#xff0c;客户管理的作用是无可替代的&#xff0c;成为企业成功的关键因素之一。如何高效地…

Excel表格转换Word文档的3个简单方法分享!

在日常办公中&#xff0c;我们经常需要将Excel表格中的数据转换为Word文档以便于编辑、排版或分享。然而&#xff0c;很多人可能并不清楚如何实现这一转换过程&#xff0c;或者只能采取复制粘贴的笨拙方式&#xff0c;导致格式错乱、效率低下。本文将详细介绍两种高效、便捷的E…

企业应该如果安全上网,软件防查盗版,企业防盗版

随着信息化的发展&#xff0c;企业日常办公越来越依赖互联网。终端以及普通PC终端在访问互联网过程中&#xff0c;会遇到各种各样不容忽视的风险&#xff0c;例如员工主动故意的数据泄漏&#xff0c;后台应用程序偷偷向外部发信息&#xff0c;木马间谍软件的外联&#xff0c;以…

精密机器中的交叉导轨负荷与容许负荷的差异!

交叉导轨的设计和制造过程中&#xff0c;负荷及容许负荷是至关重要的参数&#xff0c;只有准确计算出交叉导轨的载荷&#xff0c;才能保证交叉导轨的稳定性和使用寿命。 负荷和容许载荷是两个不同的参数&#xff0c;那这两者的有什么差异呢&#xff1f; 交叉导轨的负荷是指其承…

【Linux 命令行参数解析函数getopt()】原理及直白理解

最近写代码恰好碰见getopt()这个函数&#xff0c;去网上找了很久&#xff0c;说实话&#xff0c;其他人写的有点看不懂&#xff0c;所以将我认为可以便于理解的地方描述一下&#xff1a; int getopt(int argc, char * const argv[], const char *optstring);首先理解这个函数的…

军用光电耦合器产品的市场潜力与应用前景

光电耦合器作为现代军事技术中的关键组件&#xff0c;其在军用领域的市场空间和应用前景备受关注。本文将深入分析光电耦合器产品在军事领域中的市场潜力&#xff0c;探讨其技术特点、应用场景及未来发展趋势。 光电耦合器技术特点与工作原理 光电耦合器是一种能够将电信号与光…