GIT企业开发使用介绍
0.认识git
git就是一个版本控制器,记录每次的修改以及版本迭代的一个管理系统
至于为什么会有git的出现,主要是为了解决一份代码改了又改,但最后还是要第一版的情况
- git 可以控制电脑上所有格式的文档
1.安装git
- sudo yum install git -y
2.基本操作
2.1 初始化本地仓库-git init
.git这个文件是用来追踪管理仓库的
- mkdir gitcode
- cd gitcode
- git init
2.2 新增配置项
- git config user.name "xxxx"
- git config user.email "xxxxx"
- 查看配置项: git config -l
- 重置配置项:git config --unset user.name/user.email
- 加了global之后就是配置的全局
- git config -global user.name "xxxx"
- git config -global user.email "xxxxx"
- 重置配置项:git config --global --unset user.name/user.email
2.3 工作区 && 暂存区 && 版本库
- 使用git add时,是把文件放入到了版本库中的暂存区中,也有index索引
- 使用git commit时,通过HEAD指针,将文件提交到master中的各个分支中
- 而git能实现版本控制是通过objects实现的,修改的工作区内容会写入对象库的一个新的git对象中
2.4 添加 && 提交
- git add 文件名(一个或多个)
- git commit -m "这次提交的日志信息"
2.5 查看.git文件
- 由于之前进行了代码的提交,.git中也出现了index索引,而HEAD指针是指向的第一个文件的gitID,也就是我们之前提交的那个文件,并且通过 git cat-file -p gitID,也可以查看文件的信息
2.6 修改文件 && 查看文件状态
- git status
- git diff 文件名
2.7 版本回退 && 查看历史版本
工作区 | 暂存区 | 版本库 | |
git reset -- sort | 无 | 无 | 有影响 |
git reset -- mixed(默认) | 无 | 有影响 | 有影响 |
git reset -- hard(慎重) | 有影响 | 有影响 | 有影响 |
- git log --pretty=oneline #查看历史版本
- git reflog --pretty=oneline #查看历史所以版本
- git reset --sort --mixed --hard #版本回退
2.8 撤销修改
注:^表示上一版本,^^表示上二个版本
这些撤销操作都不会影响远程仓库的代码,因为没git push
工作区 | 暂存区 | 版本库 | 解决方式 |
xxx code | 1.手动撤销 -- 不推荐,容易出差 2.git checkout -- [filename] -- 推荐 | ||
xxx code | xxx code | git reset --hard HEAD [filename] git checkout -- [filename] | |
xxx code | xxx code | xxx code | git retset --hard HEAD^ |
- git checkout -- [filename] -- 推荐
- git reset --hard HEAD [filename]
- git checkout -- [filename]
- git retset --hard HEAD^
2.9 删除文件
- git rm [filename] 会删除工作区,暂存区中的文件
3. 分支管理
3.1 理解分支
- git 版本库中有个HEAD指针,指向master主分支,指向的是最新一次提交
- 既然master是主分支,那么自然就可以在它的基础上,创建分支 && 合并分支
3.2 创建&&切换&&合并分支
查看当前分支: git branch
- 创建分支: git branch [分支名]
- 切换分支:git chekout [分支名]
- 在dev分支下对Readme文件,多增加了一行代码,dev中HEAD指针指向的是最新一次修改
- 所以dev分支和master分支中看到的Readme文件是不同的
- 合并分支: git merge [分支名]
3.3 删除分支
- 删除分支: git branch -d [filename]
3.4 合并冲突
- 合并分支发生了冲突,因为master分支和dev分支都对Readme文件进行了修改,
- 导致git不知道该怎么合并了
解决办法:手动修改解决冲突,重新add 和commit
- 查看分支以图形结构显示:git log --graph --abbrev-commit
- 简短的查看日志: git log --pretty=oneline --abbrrev-commit
3.5 合并模式
- 使用git merge [分支名],合并的分支是看不出结构的(在回顾日志的时候
- 推荐在合并分支时:git merge --no-ff -m "xxx" [分支名]
3.6 分支策略
3.7 bug分支
假如我们现在正在 dev 分⽀上进⾏开发,开发到⼀半,突然发现 master 分⽀上⾯有 bug,需要 解决
- git stash 命令,可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时 间恢复出来( git stash pop )
- 储藏 dev ⼯作区之后,由于我们要基于master分⽀修复 bug,所以需要切回 master 分⽀,再新建临时分⽀fix-bug来修复 bug
- 之后再把fix-bug 和 master分支合并
3.8 强制删除分支
- 强制删除分支 git branch -D [分支名]
4. 远程操作
4.1 理解分布式版本控制系统
4.2 创建远程仓库
4.3 克隆远端仓库-HTTPS
- 克隆远端仓库: git clone 地址
4.5 克隆远端仓库-SSH
ssh的链接会以https链接更加安全,因为克隆远端仓库,需要配置公钥
- ssh-keygen -t rsa -C "邮箱名字"
- cat .ssh/id_rsa.pub #查看公钥
4.6 向远端仓库推送
- 向远端仓库推送:git push
4.7 拉取远程仓库
- 当远端仓库 比 本地仓库更新的时候,就可以进行pull操作(本质就是2个分支的合并)
- 拉取远程仓库 :git pull origin master : master
4.8 忽略特殊文件
当在开发过程中,需要忽略一些文件,并将其不被提交时,可以添加到.gitignore
- !b.so表示b.so可以被git提交
4.9 配置命令别名
- 配置命令别名:git config --global alias.别名 ‘指令’
4.10 删除在本地显示远端也删除的分支
- 命令:git remote prune origin
- 将远程仓库的分支删除之后,再使用git branch -d 分支名,删除本地分支
5.标签
5.1 操作标签
- 添加标签:git tag 标签名 gitID,git tag -a 标签名 -m "xxx" gitID,不写gitID默认是最新一次提交
- 查看所有标签:git tag
- 详细查看标签信息:git tag 标签名
- 删除标签:git tag -d 标签名
5.2 推送标签
- 将本地标签->远端:git push origin 标签名(推送某一个标签),git push origin --tags(推送所有标签)
- 将本地删除的标签->远端:git push origin :标签名
6. 多人协作
同一分支下的多人协作 或 不同分支下的多人协作
6.1 本地分支 与 远程分支关联
- 查看所有分支:git branch -a
- 关联分支: git checkout -b [分支名] origin/分支名
6.2 Pull Requst表单推送
- 使用这种办法进行合并分支到master中,有一个好处,最后这个表单(提交的各种代码信息)
- 项目经理就会查看一番,更加的安全,维护性也更好
7.企业级开发模型
7.1 企业级开发流程
7.2 系统开发环境
7.3 git分支设计模型
分⽀ | 名称 | 适⽤环境 |
master | 主分⽀ | ⽣产环境 |
release | 预发布分⽀ | 预发布/测试环境 |
develop | 开发分⽀ | 开发环境 |
feature | 需求开发分⽀ | 本地 |
hotfix | 紧急修复分⽀ | 本地 |
master 分⽀
- master 为主分⽀,该分⽀为 只读且唯⼀分⽀ 。⽤于部署到正式发布环境,⼀般由合并release 分⽀得到
- 主分⽀作为稳定的唯⼀代码库,任何情况下不允许直接在 master 分⽀上修改代码
- 产品的功能全部实现后,最终在master分⽀对外发布,另外所有在master分⽀的推送应该 打标签 (tag) 做记录,⽅便追溯
- master 分⽀不可删除。
release 分⽀
- release 为预发布分⽀,基于本次上线所有的 feature 分⽀合并到 develop 分⽀之后,基于 develop 分⽀创建。可以部署到测试或预发布集群
- 命名以 release/ 开头,建议的命名规则: release/version_publishtime 。
- release 分⽀主要⽤于提交给测试⼈员进⾏功能测试。发布提测阶段,会以 release 分⽀代码为基准进⾏提测
- 如果在 release 分⽀测试出问题,需要回归验证 develop 分⽀看否存在此问题
- release 分⽀属于临时分⽀,产品上线后可选删除
develop 分⽀
- develop 为开发分⽀,基于master分⽀创建的只读且唯⼀分⽀,始终保持最新完成以及 bug 修复后的代码。可部署到开发环境对应集群。
- 可根据需求⼤⼩程度确定是由 feature 分⽀合并,还是直接在上⾯开发(⾮常不建议
feature 分⽀
- feature 分⽀通常为新功能或新特性开发分⽀,以 develop 分⽀为基础创建 feature 分
- 命名以 feature/ 开头,建议的命名规则: feature/user_createtime_feature
- 新特性或新功能开发完成后,开发⼈员需合到 develop 分⽀
- ⼀旦该需求发布上线,便将其删除
hotfix 分⽀
- hotfix 分⽀为线上 bug 修复分⽀或叫 补丁分⽀ ,主要⽤于对线上的版本进⾏ bug 修复。当线上出现紧急问题需要⻢上修复时,需要基于 master 分⽀创建 hotfix 分
- ⽀
- 命名以 hotfix/ 开头,建议的命名规则: hotfix/user_createtime_hotfix
- 当问题修复完成后,需要合并到 master 分⽀和 develop 分⽀并推送远程。⼀旦修复上线,便将其删除
7.4 企业级项目管理
Gitee 企业版 - 企业级 DevOps 研发效能平台
=========================================================================
相关文章:
GIT企业开发使用介绍
0.认识git git就是一个版本控制器,记录每次的修改以及版本迭代的一个管理系统 至于为什么会有git的出现,主要是为了解决一份代码改了又改,但最后还是要第一版的情况 git 可以控制电脑上所有格式的文档 1.安装git sudo yum install git -y…...
文件上传-前端验证
查看源代码(找验证代码) 1、源代码直接找到验证代码 示例: function checkFileExt(filename){var flag false; //状态var arr ["jpg","png","gif"]; //允许上传的文件//取出上传文件的扩展名var index f…...
ROT加密算法login-RESERVE
ROT算法(字母轮换加密) 也称为Caesar加密,是一种简单的字母替换加密算法。它通过将字母表中的每个字母向后(或向前)移动固定的位置来加密文本。 加密步骤: 选择一个固定的偏移量(通常是1到25之间的整数)&…...
C++ 新特性 | C++20 常用新特性介绍
目录 1、模块(Modules) 2、协程(Coroutines) 3、概念(Concepts) 4、范围(Ranges) 5、三向比较符(three-way comparison) C软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)https…...
Java设计模式之策略模式实践
1、策略接口 /*** 策略接口*/ public interface DemoStrategy {Result execute(); } 2、策略工厂 /*** 策略工厂*/ Component public class DemoFactory {Resourceprivate final Map<String, DemoStrategy> demoStrategy new ConcurrentHashMap<>();public Demo…...
C语言——结构体数组、结构体指针、结构体函数与二级指针
C语言中的结构体(struct)是一种用户自定义的数据类型,它允许你将不同类型的数据项组合成一个单一的类型。结构体数组则是一种特殊的数组,其元素为结构体类型。这意味着你可以在一个数组中存储多个具有相同结构的记录。 定义结构体…...
【4】策略模式
如上图所示,如果要加入一个新的货币,那么就需要对类中的Calculate函数进行修改,这违背了封闭开放原则。 上图中的方式更加合适,搞一个抽象类(方法中可以用多态调用),然后每个货币自己是一个类&a…...
BGP 反射器联邦实验
要求: 1.如图连接网络,合理规划IP地址,AS 200内IGP协议为OSPF 2.R1属于AS 100;R2-R3-R4小AS 234 R5-R6-R7小AS 567,同时声明大AS 200,R8属于AS 300 3.R2-R5 R4-R7 之间为联邦EBGP邻居关系 4.R1-R8之…...
stm32入门学习13-时钟RTC
(一)时钟RTC stm32内部集成了一个秒计数器RTC,用于显示我们日常的时间,如日期年月日,时分秒等,RTC的主要原理就是进行每秒自增,如果我们知道开始记秒的开始时间,就可以计算现在的日…...
vuex properties of undefined (reading ‘getters‘)
前言: 最近打算用vue 写个音乐播放器,在搞 vuex 的时候遇到一个很神奇报错;vuex 姿势练了千百次了,刚开始的时候我一直以为是代码问题,反复检查了带了,依旧报错。 Error in mounted hook: "TypeError:…...
再谈表的约束
文章目录 自增长唯一键外键 自增长 auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键。 自增长的…...
认识一下测试策略与测试方案
目录 测试方案 测试策略 测试策略的内容主要包括 测试技术和工具 测试启动、停止和完成标准 风险分析和应对方案 测试范围 测试角色和职责 测试方法和类型 测试工具 测试层级 测试指标 测试可交付成果 测试方案的内容包括 测试目标 测试范围 测试环境 测试策略…...
Gradle 查看包的依赖关系
在 Terminal 中可以通过 gradle 的命令查看项目中使用的依赖库及其版本,并且可以更加直观的看到各个模块中库之间的依赖关系。同时也可以跟踪并解决与库版本冲突有关的问题。 工具查看 在 Android Studio 中选择 View > Tool Windoors > Gradle 或者直接选择…...
虚幻5|给攻击添加特效
一,打开武器蓝图 选择武器网格体,在细节处找到组件开始重叠,点击 写下以下蓝图,这是最终蓝图,后面会分讲要点 二,actor拥有标签,就是被击打的敌人,我们给actor添加标签 到主界面&am…...
Delphi包管理与依赖:掌握GetIt与DelphiPI的艺术
标题:Delphi包管理与依赖:掌握GetIt与DelphiPI的艺术 在Delphi的广袤生态中,包管理和依赖解决方案是构建大型项目不可或缺的工具。本文将深入探讨Delphi中的两种主要包管理工具:GetIt包管理器和DelphiPI,通过实际代码…...
如何使用unittest和pytest进行python脚本的单元测试
1. 关于unittest和pytest unittest是python内置的支持单元测试的模块,他提供了核心类,TestCase,让单元测试 代码的编写不再是从0开始,不再是作坊式,而是标准化,模板化,工厂化。 pytest是第三方…...
Java中的值传递与引用传递
Java中的值传递与引用传递 在Java编程中,理解值传递与引用传递的概念是编写无误代码的关键。这两个概念有时会让人感到困惑,特别是当它们与对象有关时。现在,我们将一步步地解释这两个概念,帮助你彻底理解它们。 1. 值传递与引用…...
Seaborn库
目录 主要功能和特点 使用方法 实例应用 Seaborn库的最新版本有哪些新功能和改进? 如何在Seaborn中实现复杂的数据预处理步骤,例如数据清洗和转换? Seaborn与其他数据可视化库(如Matplotlib、Plotly)相比有哪些优…...
openresty整合modsecurity
安装依赖包 安装依赖 yum -y install gcc-c flex bison yajl yajl-devel curl-devel curl GeoIP-devel doxygen zlib-devel libtool libxml2-devel libxslt-devel安装依赖包 ftp://ftp.icm.edu.pl/vol/rzm7/linux-centos-vault/7.8.2003/sclo/x86_64/rh/Packages/d/devtools…...
结构体structure、共用体union
目录 结构体 结构体类型的定义形式 结构体类型的大小 内存计算例子 共用体union 用共用体判断大小端 结构体和共用体对比 qsort() 结构体 结构体类型——用来描述复杂数据的一种数据类型 构造类型(用户自定义类型) struc…...
Spring自动注册-<bean>标签和属性解析
xml文件中最常见也最核心的就是<bean>,<Import>,<beans>,<alias>标签,关于它们的解析主要是BeanDefinitionParserDelegate类中.<bean>标签的解析最为复杂和重要. <bean>标签 processBeanDefinition(ele, delegate)方法中,主要是是对…...
【仿RabbitMQ消息队列】基于C++11中packaged_tack异步线程池
目录 什么是同步和异步? future 使用future和async配合管理异步任务 使用promise和future配合管理异步任务 使⽤std::packaged_task和std::future配合 C11异步线程池 什么是同步和异步? 同步(Synchronous) 同步编程是指程…...
免费下载专利
给大家提供一个可以免费下载专利的地方 链接:https://www.drugfuture.com/cnpat/cn_patent.asp...
CentOS7安装流程步骤详细教程
1. 简介 1.1. 概述 CentOS 7是一款基于Red Hat Enterprise Linux(RHEL)的开源Linux发行版,它提供了一个稳定、安全、高效的操作系统,适用于企业级应用、服务器、云计算等领域。CentOS 7以其高度的稳定性和安全性而闻名,它广泛应用于各种行业和领域,包括政府、金融、医疗、…...
【大模型从入门到精通17】openAI API 构建和评估大型语言模型(LLM)应用5
这里写目录标题 理论问题:实践问题:理论实践 理论问题: 1.描述评估LLM应用程序输出的重要性,并提及至少三个维度,这些输出应该在这几个维度上被评估。 2.解释在评估LLM应用程序时开发稳健的性能指标的作用,…...
苹果手机无iCloud备份下“最近删除”照片的恢复策略
iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,因此,具有极其重要的纪念价值。但由于我们的失误操作导致照片被删除&a…...
Docker搭建Minio容器
Docker搭建Minio容器 前言 在上一集我们介绍了分布式文件存储行业解决方案以及技术选型。最终我们决定选用Minio作为分布式文件存储。 那么这集我们就在Docker上搭建Minio容器即可。 Docker搭建Minio容器步骤 创建Minio文件目录 我们选择创建/minio/data目录 修改目录权…...
【C++】多源BFS问题和拓扑排序
目录 多源BFS介绍 单源BFS和多源BFS的区别 SO如何解决多源BFS问题 多源之核心 矩阵 算法思路 代码实现 飞地的数量 算法思路 代码实现 地图中的最高点 算法思路 代码实现 地图分析 算法思路 代码实现 拓扑排序介绍 有向无环图 编辑 如何解决这类问题 课…...
CentOS 7 安装详细教程
大家好,我是程序员小羊! 前言: CentOS 7 是一个稳定的企业级 Linux 发行版,广泛用于服务器环境。CentOS 7 是基于 Red Hat Enterprise Linux (RHEL) 构建的企业级 Linux 发行版,提供免费的、开源的操作系统…...
mybatis-plus + springboot 多对多实例
在MyBatis Plus中,自动填充数据是一种非常实用的功能,它可以自动地为一些字段设置默认值,比如创建时间和更新时间。对于多对多关系来说,虽然自动填充主要针对单一实体的字段,但在某些情况下,你可能也需要在…...
无锡市滨湖区建设局网站/班级优化大师官方网站
题目描述 给你一个整数数组 nums ,其中 nums[i] 表示第 i 个袋子里球的数目。同时给你一个整数 maxOperations 。 你可以进行如下操作至多 maxOperations 次: 选择任意一个袋子,并将袋子里的球分到 2 个新的袋子中,每个袋子里都有…...
大良网站建设服务/百度引擎提交入口
join 方法用于连接字符串数组 1 s [a, b, c, d] 2 print(.join(s)) 3 print(-.join(s)) 4 5 results: 6 7 abcd 8 a-b-c-d 使用 % 连接多个变量 1 a hello 2 b python 3 c 1 4 print(%s %s %s %s % (a, b, c, s)) 5 6 results: 7 8 hello python 1 [a, b, c, d] 转载于…...
怎么设网站/推广普通话的内容简短
数据结构是一个字典,每个值都是另一个字典,如:>>> from lib import schedule>>> schedule schedule.Schedule()>>> game schedule.games[0]>>> game.home>>> game.home.lineup{guerv001: {HR…...
北京网站开发教师招聘/seo是什么意思?
测试覆盖率是每个软件测试人员都关心的问题,它一方面可以衡量测试工作本身的有效性,也可以辅助增强管理者对于软件产品质量的信心水平。如果面试官问:你项目中的测试用例覆盖率是怎样的?如何回答?1)回答覆盖率100% 可能…...
小程序转换成网页/seo是搜索引擎优化
问题:谋农场饲养的某种动物所能达到的最大年龄为15岁,将其分为三个年龄组:第一组0~5岁;第二组6~10岁;第三组11~15岁。动物从第二个年龄组开始繁殖后代,第二个年龄组的动物…...
微信商城网站怎么做/厦门最好的seo公司
pushState和replaceState是H5的API中新添加的两个方法。通过window.history方法来对浏览器历史记录的读写。 pushState和replaceState 在 HTML 文件中, history.pushState() 方法向浏览器历史添加了一个状态。 pushState() 带有三个参数:一个状态对象,…...