持续集成01--Git版本管理及基础应用实践

前言

        本系列文章旨在深入探讨持续集成/持续部署(Continuous Integration/Continuous Deployment, CI/CD)流程中的各个环节,而本篇将聚焦于Git版本管理及其基本应用。通过本文,读者将了解到Git的基本原理、安装配置、基本命令以及如何在日常工作中高效利用Git进行版本控制。

1、Git简介与安装

1.1、Git概述:介绍Git的起源、特点与优势

起源:Git由林纳斯·托瓦兹(Linus Torvalds)于2005年为了管理Linux内核的源代码而开发。

特点:分布式版本控制系统,允许每个开发者拥有完整的项目历史,促进了更高效的协作和更灵活的分支管理。

优势:

        高效性:快速的数据处理速度,适合大型项目。

        灵活性:支持离线工作,本地分支操作无需网络连接。

        安全性:通过哈希校验保证数据完整性,防止数据损坏。

        强大性:功能丰富,支持复杂的分支合并与冲突解决策略。

        社区支持:拥有庞大的用户和开发者社区,丰富的文档和插件资源。

1.2、Git的安装:基于win系统安装和使用

        为了更好的理解和熟悉git,我们先在win系统上安装和使用,后续在ci/cd时再介绍Linux系统上的安装和使用

1.2.1、下载Git

        进入git官网(https://git-scm.com/)--选择Downloads--选择Widows版本进行下载。

        选择独立安装,根据自己电脑系统,确定安装32位/64位。

1.2.2、安装Git

        下载后双击exe文件(Git-2.39.1-64-bit.exe)--一路Next安装

1.2.3、验证Git

        安装成功后,打开CMD(命令提示符),输入git --version验证安装结果;出现版本号则说明安装成功

2、Git远程仓库配置

2.1、注册gitee

我们以gitee(码云)远程仓库进行演示,之所以选择gitee因为对国内用户较为友好,gitee地址https://gitee.com/,注册这里就不再赘述了,直接开整

2.2、创建gitee远程仓库

        登录gitee--首页,点击+新建

        填写相关信息后点击创建。

        注意:

        开源:不需要配置对应的公钥和授权,直接通过https的URL请求请求即可

        私有:需要公钥私钥通过身份鉴权建立信任,生成对应的私钥和公钥,针对于公钥进行授权操作

        我们在创建仓库时尽量创建非空仓库,选择初始化仓库进行创建

2.3、私有仓库授权

2.3.1、生成私钥、公钥

        公有仓库可直接访问,不再赘述,主要讲解私有仓库的授权

        CMD终端输入:ssh-keygen -t ed25519 -C‘注释’

        输入后4次回车,出现下方提示即公钥私钥生成成功

2.3.2、查看生成的私钥、公钥

        敲完第一个回车后提示的路径即为公钥私钥文件所在地址。注意:.ssh文件为隐藏文件,未开放隐藏文件的需要勾选隐藏文件显示

        文本打开公钥文件

2.3.3、Gitee配置本地git公钥

        进入gitee,选择仓库--设置--SSH公钥:把上面的公钥数据进行复制粘贴即可

2.4、配置Git环境

        全局设置意味着这些配置将应用于你计算机上的所有Git仓库。使用以下命令来设置:

2.4.1、设置全局用户名和邮箱

        打开cmd终端,输入命令,将"Your Name"替换为你希望在Git提交中显示的用户名。"your.email@example.com"替换为你的邮箱地址。这个邮箱地址将用于Git提交,并可能用于与Git服务(如GitHub、GitLabGitee等)的交互。

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"

注意:如果你的gitee邮箱设置的是不公开,需要配置保密邮箱(通过链接进入gitee邮箱管理页)

https://gitee.com/profile/emails

2.4.2、验证设置

git config user.name
git config user.email
或者git config --list

3、Git基础操作

3.1、工作区、暂存区与版本库及其关系

工作区(Working Directory):你在电脑上看到和编辑的目录和文件。改动直接在这里发生。

暂存区(Staging Area/Index):一个中间区域,用于存放即将被提交的改动。使用git add将工作区的改动移至暂存区。

版本库(Repository):存储项目所有版本和提交记录的数据库。使用git commit将暂存区的改动永久保存到版本库。

关系概述:工作区是改动的起点。暂存区是改动从工作区到版本库的过渡地带。版本库存储了项目历史的完整记录。这个流程(修改工作区 -> 添加到暂存区 -> 提交到版本库)是Git版本控制的基本循环。

3.2、基本命令

        Git 是一个分布式版本控制系统,它允许你跟踪和管理代码的更改。以下是 Git 中几个基本且常用的命令及其使用方法:

3.2.1、git add

        git add 命令用于将工作目录中的文件添加到暂存区(staging area),准备进行提交。

git add filename # 将指定文件添加到暂存区
git add . # 将当前目录下所有修改过的文件添加到暂存区
git add -u # 添加所有已跟踪但已修改或已删除的文件到暂存区(不包括新文件)

3.2.2、git commit

        git commit 命令用于将暂存区的改动内容提交到本地仓库中,可以附加提交信息来描述改动。

git commit -m "Commit message" # 提交暂存区的改动,并附上提交信息

3.2.3、git status

        git status 命令用于显示当前工作目录和暂存区的状态,包括哪些文件已被修改、哪些文件已暂存等。

git status

3.2.4、git log

        git log 命令用于显示提交历史记录。


git log # 显示完整的提交历史

git log --oneline # 简洁显示提交历史,每行一个提交

git log -p # 显示每次提交的差异

3.3、远程仓库操作

        当需要与团队成员共享代码时,通常会使用远程仓库(如 GitHub、GitLab、Gitee 等)。以下是几个与远程仓库交互的常用命令:

3.3.1、git remote

git remote 命令用于管理远程仓库的引用。

git remote -v # 显示远程仓库的详细信息

git remote add origin <repository-url> # 添加一个新的远程仓库
3.3.2、git push

git push 命令用于将本地的改动推送到远程仓库。

git push origin master # 将本地的 master 分支推送到远程仓库的 master 分支

git push -u origin main # 如果你的默认分支是 main,则使用此命令,并设置上游分支
3.3.3、git pull

git pull 命令用于从远程仓库获取最新版本并合并到你当前的工作分支。

git pull origin master # 从远程仓库的 master 分支拉取最新更改并合并到当前分支

git pull -f origin v2.0:master  # 强制远程分支:本地分支同步(指定分支同步+合并)
3.3.4、git fetch

git fetch 命令用于从远程仓库获取最新版本,但不会合并或修改你当前的工作。

git fetch origin # 从远程仓库获取最新版本,但不合并

        这些命令是 Git 版本控制系统中非常基础和常用的部分,通过熟练使用它们,可以有效地管理你的代码版本。

4、Git分支管理

4.1、分支的概念与重要性

        在Git中,分支(Branch)是一个指向提交(Commit)对象的可变指针。Git的分支管理是其最强大的特性之一,它允许你在开发过程中创建多个工作流,每个工作流专注于特定的功能或修复。分支的重要性体现在以下几个方面:

并行开发:团队成员可以在不同的分支上并行工作,互不影响,从而提高开发效率。

版本控制:分支可以视为项目的不同版本或开发阶段,便于管理项目的多个阶段或版本。

实验性开发:开发者可以在分支上尝试新的功能或修复,如果成功则合并到主分支,否则可以安全地删除或放弃该分支。

隔离风险:将不稳定的代码与稳定代码隔离,减少意外错误对主项目的影响。

4.2、创建与切换分支

创建分支:使用git branch <branch-name>命令可以创建一个新的分支,但这不会自动切换到该分支。要同时创建并切换到新分支,可以使用git checkout -b <branch-name>(在Git 2.23版本之后,推荐使用git switch -c <branch-name>来仅切换分支,git branch <branch-name>来仅创建分支)。

4.3、合并与变基

合并(Merge)git merge <branch-name>命令用于将指定分支的更改合并到当前分支中。合并会创建一个新的“合并提交”(merge commit),记录两个分支的历史。合并是解决分支间冲突并整合更改的常见方式。

变基(Rebase)git rebase <branch-name>命令用于将当前分支的更改应用到指定分支的顶端,从而创建一个更线性的项目历史。与合并不同,变基会重新应用当前分支上的更改,使得项目历史看起来像是按顺序进行的。变基常用于维护更清晰的项目历史,但可能会改变提交的历史ID,导致问题在协作环境中。

5、Git进阶应用

5.1、标签管理

        在Git中,标签(Tag)用于给项目中的特定点(如发布版本)打上标记。与分支不同的是,标签是静态的,指向特定的提交,并且不会随着项目的推进而改变。使用git tag命令可以管理项目的标签。

创建标签git tag <tagname> 用于给最新提交打标签。若要给特定提交打标签,可使用 git tag <tagname> <commit-id>

查看标签git tag 列出所有标签。

带有说明的标签git tag -a <tagname> -m "说明信息" 创建带有说明的标签。

推送标签到远程仓库git push origin <tagname> 推送单个标签到远程仓库,或 git push origin --tags 推送所有标签。

删除标签git tag -d <tagname> 删除本地标签,git push origin :refs/tags/<tagname> 删除远程标签(注意Git 2.0以前版本可能有所不同)。

5.2、冲突解决

        在Git中,当两个或多个分支在合并时修改了同一个文件的同一部分,就会产生合并冲突。Git会暂停合并过程,并要求用户手动解决冲突。

识别冲突:Git会在冲突的文件中标记出冲突的部分,通常使用<<<<<<<=======>>>>>>>标记。

解决冲突:手动编辑冲突文件,选择或合并所需的更改。

添加并提交:解决冲突后,使用git add <filename>将冲突文件标记为已解决,然后git commit完成合并提交。

5.3、钩子(Hooks)

        Git钩子(Hooks)是Git在特定事件发生时自动执行的脚本。这些事件包括提交(commit)、推送(push)等。通过自定义钩子,你可以在Git命令执行前后执行自定义操作,如代码检查、自动化测试等。

钩子类型:常见的钩子包括pre-commit(提交前)、commit-msg(提交信息检查)、post-commit(提交后)、pre-push(推送前)等。

钩子位置:Git仓库的.git/hooks目录下包含了所有可用的钩子脚本模板。你可以复制这些模板到同一目录下(去掉.sample后缀),然后编辑它们以包含自定义的shell脚本或命令。

编写钩子:钩子脚本通常是shell脚本,但也可以是任何可执行文件。你可以在其中编写任何在Git事件发生时需要执行的命令。

总结

通过本文的学习,读者将能够掌握Git版本管理系统的基本使用方法,为后续的软件开发与团队协作打下坚实基础。同时,也为后续深入学习CI/CD流程中的其他环节做好准备。

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

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

相关文章

高校动作捕捉与数字人开发实训室方案:助推高校开设虚拟数字人微专业

目前一些学校除了传统的实训室建设之外&#xff0c;部分院校会建设一些“微专业”&#xff0c;专业方向与AIGC以及虚拟数字人有关&#xff0c;通过引进一些虚拟数字人以及全身动作捕捉设备相关的产品和系统工具&#xff0c;进行设计课程方案&#xff0c;比如虚拟人直播&#xf…

Vue3学习体验(一)

搭建工程 使用vue-cli脚手架创建vue3工程 vue create vue3-app-vue-cliVue-cli官网&#xff1a;https://cli.vuejs.org/zh/guide/installation.html 使用vite搭建vue3工程 npm init表示临时的下载vite应用来创建vue3工程&#xff0c;工程名称为vue3-app-vite npm init vit…

银河麒麟高级服务器操作系统V10加固操作指南

1:检查系统openssh安全配置: 2:检查是否设置口令过期前警告天数: 3:检查账户认证失败次数限制: 修改/etc/pam.d/system-auth文件中deny的参数即可 4:检查是否配置SSH方式账户认证失败次数限制:

SAP DR创建借项凭证简介

DR创建借项凭证简介 创建借项凭证请求的详细步骤1. 进入创建销售订单的界面2. 选择销售凭证类型3. 输入销售组织数据4. 输入客户和参考数据5. 添加项目明细6. 检查和保存创建实际的借项凭证借项凭证后台配置定义凭证类型定义项目类别定义销售开票类型借项凭证请求的业务意义跟踪…

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发&#xff0c;最常见的几个注解之一&#xff0c;这篇博文我们以案例和源码相结合&#xff0c;帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

非对称加解密和签名

非对称加解密特点 一对密钥&#xff0c;公钥和私钥。私钥自己持有&#xff0c;公钥公开给通信的对方。 如果公钥用作加密&#xff0c;那么私钥用作解密。 如果私钥用做加密&#xff0c;那么公钥用作解密。 如果数据量少可用非对称加密算法直接加密。 如果数据量大&#xff0c;…

【双色转模拟调光磁吸灯应用方案】调光线性度好 调光频率1K以上都兼容 LED护眼教室黑板灯降压恒流驱动IC芯片FP7195

文章目录 前言 一、行业要求和痛点 1、设计空间小&#xff0c;双路调光调色不容易排布 2、磁场对调光的影响 二、FP7195如何解决这些要求和痛点 1、FP7195实际应用双色温调光电路框架 2、FP7195的转模拟调光技术 总结 前言 磁吸灯作为一种时尚、实用的家居装饰灯具&#xff0c;…

javaweb学习

javaweb就是实现浏览器和服务器之间的交互 1、服务器配置 Run->Edit Configurations&#xff0c;点击右上角的号&#xff0c;选择Tomcat Server的local&#xff1a; 选择server下的Configure...&#xff0c;在弹出的界面里点击有上角的号&#xff0c;选择自己解压的合适的t…

220V降压5ⅤIC-AH8652

220V降压至5V的IC - AH8652 在电子设计中&#xff0c;电压转换是一个常见的需求&#xff0c;尤其是在需要将高电压转换为低电压以供电给微电子设备时。AH8652是一款专为降压转换设计的集成电路&#xff0c;它能够将220V的交流输入电压转换为稳定的5V直流输出&#xff0c;非常适…

java基础之变量,类型的转换,跟着哔站尚硅谷自学笔记。

变量 变量的介绍以及使用 1.变量的数据类型&#xff1a;基本数据类型&#xff1a;4类8种整数&#xff1a;byte short int long 浮点数&#xff1a;float double字符型&#xff1a;char布尔型&#xff1a;boolean引用数据类型&#xff1a;类 数组 接口 枚举 注解2.概述&#xf…

gptpdf:使用大模型(如 GPT-4o)将 PDF 解析为 markdown。

今天给大家分享一个开源的项目&#xff0c; 使用视觉大语言模型&#xff08;如 GPT-4o&#xff09;将 PDF 解析为 markdown。 方法非常简单(只有293行代码)&#xff0c;但几乎可以完美地解析排版、数学公式、表格、图片、图表等。 使用 GeneralAgent lib 与 OpenAI API 交互。…

C++笔试强训4

文章目录 一、选择题1-5题6-10题 二、编程题题目一题目二 一、选择题 1-5题 %o就是输出八进制的无符号数&#xff0c;0123&#xff0c;&#xff0c;以0开头&#xff0c;本来就是八进制&#xff0c;所以输出为123&#xff0c;123是十进制&#xff0c;转化为八进制就是173. 故选…

双向带头循环链表

一、概念 何为双向&#xff1a;此链表每一个节点的指针域由两部分组成&#xff0c;一个指针指向下一个节点&#xff0c;另一个指针指向上一个节点&#xff0c;并且两头的节点也是如此&#xff0c;头节点的下一个节点是尾节点&#xff0c;尾节点的上一个节点是头节点&#xff1b…

C++ — 引用浅谈

引言 在C的语法规则中&#xff0c;定义了一种新的方法&#xff0c;叫做引用。在学习的初期&#xff0c;引用的作用很类似于指针&#xff08;但需要注意引用不等于指针&#xff09;&#xff0c;引⽤不是新定义⼀个变量&#xff0c;⽽是给已存在变量取了⼀个别名。 在上边…

Cesium--获取当前相机中心与地面的射线焦点

本文记录获取当前相机中心与地面的射线焦点的方法&#xff0c;可用于视角缩放过程中&#xff0c;控制视角自动平滑切换到二维等场景&#xff1a; 方法一定是视角中心能与地面有交集&#xff0c;如果对着地平线或对着天空肯定是没效果的。直接放代码&#xff1a; //调整相机到正…

链接追踪系列-04.linux服务器docker安装elk

[rootVM-24-17-centos ~]# cat /proc/sys/vm/max_map_count 65530 [rootVM-24-17-centos ~]# sysctl -w vm.max_map_count262144 vm.max_map_count 262144 #先创建出相应目录&#xff1a;/opt/dockerV/es/…docker run -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d -p 92…

单目3D和bev综述

文章目录 SOTA2D 检测单目3d检测3d bev cam范式1 Transformer attention is all you need 20172 ViT vision transformer ICLR 2021google3 swin transformer 2021 ICCV bestpaper MS4 DETR 2020 decoder set match4 Deformabel DETR &#xff08;deformabel convolution&#…

c++包管理器

conan conan search&#xff0c;查看网络库 conan profile detect&#xff0c;生成缓存信息conan new cmake_exe/cmake_lib&#xff0c;创建cmakelists.txtconan install .&#xff0c;执行Conanfile.txt中的配置&#xff0c;生成相关的bat文件 项目中配置Conanfile.txt(或者…

k8s核心操作_存储抽象_K8S中的持久卷与持久卷申请_PV/PVC理解与搭建_解决联动删除动态存储管理---分布式云原生部署架构搭建029

我们之前使用nfs搭建了一个存储系统,并且使用nfs的自动同步,让,不同节点上部署的应用,都可以,访问到自己的配置文件,并且 当pod宕机,在其他机器上启动,也可以访问到配置文件,但是这里依然有问题. 1.首先对于nfs上的文件夹,现在是我们自己创建的,有很多程序会自动创建很多文件夹…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前&#xff0c;访问公司数据需要具备技术技能&#xff0c;包括熟练掌握各种仪表板工具&#xff0c;甚至深入研究数据库查询语言的复杂性。然而&#xff0c;随着 ChatGPT 等 LLM 的兴起&#xff0c;随着所谓的检索…