【Git】--- Git远程操作 标签管理
Welcome to 9ilk's Code World

(๑•́ ₃ •̀๑) 个人主页: 9ilk
(๑•́ ₃ •̀๑) 文章专栏: Git
前面我们学习的操作都是在本地仓库进行了,如果团队内多人协作都在本地仓库操作是不行的,此时需要新的解决方案 --- 远程仓库。本篇博客我们将讲解关于远程仓库的一些操作同时介绍一下标签的相关知识。
🏠 Git远程操作
理解分布式版本控制系统
我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。而我们的Git其实是分布式版本控制系统!那什么是分布式版本控制系统呢?
实际开发中我们是需要多人协作的,只具备我们之前所讲的分支功能是不足以支撑我们的多人协作开发的。我们之前的操作是在本地开发(即一台服务器上),如果多人开发,我们肯定是希望每个人在属于自己的服务器上开发,此时初步方案是每台服务器上有属于自己的一个完整版本库,团队人员之前只需要把各自的修改推送给对方,就可以互相看到对方的修改了:

但这种方案也有其局限性,如果其中一台主机没连上局域网或硬盘损坏导致本地仓库内容全部丢失,此时不易修复,因此有了下面的方案:

这其实就相当于是一个分布式版本控制系统 , 分布式版本控制系统通常也有一台充当"中央服务器"的电脑,但这个服务器的作用仅仅是用来方便"交换"大家的修改,没有它大家也一样干活,每个本地仓库都是完整的,并且可以独立于其他仓库进行操作,远程仓库只是一个共享平台,而不是一个单一的中心,方便多人协作且安全性很高,有了它就不怕本地出现什么故障,出现故障直接拉取即可。
远程仓库
Git是分布式版本控制系统,同一个Git仓库,可以分布到不同机器上。最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以"克隆"这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
了解这些之后,我们要明白的是,一台电脑也是可以克隆多个版本库的,只要不是在同一个目录下,但是在一台电脑上克隆几个远程库完成没有意义。
实际情况是,找一台电脑充当服务器的角色,每天24h开机,其他每个人都从这个“服务器”仓库克隆一份到自己电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
我们学习Git需要自己搭建个中间服务器吗?其实不用,国外的GitHub和国内的Gitee网站已经提供Git仓库托管服务了,本篇博客我们以gitee为例来使用远程仓库。
Gitee新建仓库步骤如下:
1. 在首页找到新建仓库选项

2. 设置相关选项

注意:
(1) 一个远程仓库内包含了不同的成员,可以在管理仓库选项进行设置,不同成员对应不同的权限

(2) Git的Issue文件一般是团队开发人员或用户用来报告bug,功能请求的重要工具,帮助开发者发现问题。

(3)Pull Request : 合并申请单。实际开发中,仓库管理员不允许开发者直接将次分支dev合并到master分支,需要提交合并申请单说明合并原因等,管理员看到同意之后才进行合并操作。

克隆远程仓库到本地
要想克隆一个远端仓库到本地,gitee是给我们提供相应操作的:

我们可以看到gitee给我们提供了克隆仓库可以使用的多种数据传输协议。其中,SSH协议和HTTPS协议是Git最常使用的两种数据传输协议。SSH协议使用了公钥加密和公钥登陆机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放上服务器,由Git服务器进行管理。使用HTTPS方式时,没有要求,可以直接克隆下来。
(1)HTTPS
点开克隆仓库选择HTTPS会显示HTTPS远程克隆地址,我们需要将其复制下来:

克隆仓库的指令:
git clone + HTTPS克隆地址
注意:克隆操作不能在任意一个本地仓库下执行!

我们使用ls -a命令查看克隆仓库与远端仓库是相同的:

克隆之后状态如下:

-
origin代表克隆下来仓库的默认仓库名
如果我想查看克隆仓库的信息可以使用git remote命令:
git remote //查看远程仓库
git remote -v 查看更多详细信息
我们可以看到我们克隆下来的仓库具有fetch(拉取权限) 和 push(推送权限)

(2)SSH
同样的,SSH协议也有个对应的克隆地址,但是与HTTPS不同的是,SSH协议采用了公钥加密和公钥登录机制,需要将我们的公钥放上服务器,由Git服务器进行管理

我们现在码云的安全设置里查看Git服务器是否配置了公钥:

此时没有配置公钥进行克隆操作是会报错的:

配置公钥:
(1)查看.ssh目录。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有 id_rsa 和 id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,需要创建SSHKey

(2)创建SSH-Key :
# 注意要输⼊⾃⼰的邮箱,然后⼀路回⻋,使⽤默认值即可
ssh-keygen -t rsa -C "xxxx"
查看.ssh目录是否创建成功:

(3) 打开id_rsa.pub将公钥配置到码云:
cat id_rsa.pub

(4) 克隆

向远程仓库推送
本地已经clone成功远程仓库后,我们便可以向仓库中提交内容。
在推送之前,我们最好将我们克隆仓库的配置项设置好,user.name与user.email和码云保持一致:

我们在本地新建file.txt文件然后进行提交,此时会与我们之前本地新建仓库报出的信息不同:

向远端仓库提交需要使用git push命令:
git push origin master:master //远程仓库 本地分支:远程分支
git push origin master //远程分支与本地分支名相同远程分支可以省略
注意:对于远程仓库的master分支,在克隆的时候git会自动帮我们和克隆仓库建立联系,这样才能push和pull。

拉取远程仓库
拉取操作一般是远端仓库版本领先于当前本地仓库,下面我们进行演示:
(1)在远端仓库编辑文件

注意:实际开发中不要在远程仓库上编辑,这里只是演示需要
(2)从远端仓库中拉取
git pull origin master:master 远程仓库 远程分支:本地分支
git pull origin master //本地分支与master分支名相同可以省略
注意:pull帮我们完成两件事,先将代码拉取,然后merge分支。相当于是git fetch 和 git merge的组合,如果合并有冲突,还需我们自己手动解决。

忽略特殊文件
在日常开发中,我们有些文件不想或者不应该提交到远端,比如保存了数据库密码的配置文件,那怎么让Git知道呢?在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了。日常开发我们不只改一个文件,可能一次性改多个文件,一般是git add . 此时不想对一个文件add误操作的话.gitignore就是帮我们解决这个问题的。
gitee在我们新建仓库时可以帮我们生成,只不过需要我们进行勾选:

当然你也可以在工作区的根目录下创建一个特殊的.gitignore文件

测试:

如果我们想强制将忽略文件添加,可以带上-f选项:
git add -f //强制将忽略文件添加

但这有点违背我们使用.gitignore的初衷了,我们可以在.gitignore文件中使用 !+文件名 的格式设置不想忽略的:

如果我们想查看一个文件被忽略的原因,可以使用命令:
git check-ignore -v 查看为什么被忽略
这里的意思是被忽略是因为第三行的*.so
配置命令别名
我们发现有些Git命令比较长,幸运的是,Git与Linux一样支持对命令进行简化,即“取别名”。
//在全局给git status取别名git config --global alias.st status
此后我们可以使用git st来查看查看状态了:

//补充命令
git log --pretty=oneline --abbrev-commit
//打印出短的commit id

🏠 Git标签管理
标签tag,可以简单的理解为是对某次 commit的一个标识相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 commit 起一个V1.0这样的标签来标识里程碑的意义。
这有什么用呢?相较于难以记住的commit id,tag很好的解决这个问题,因为tag一定要给一个让人容易记住,且有意义的名字。当我们需要回退到某个重要版本时,直接使用标签就能很快定位到。
创建标签
git tag v1.0 //默认给最新一次提交打标签
git tag 列举出当前哪些标签存在

查看.git目录变化:

注意 : 默认标签是打在最新提交的commit上的。

如果我想给指定提交打标签呢?
git tag 标签名 + commit id //给指定提交打标签
注意:标签不是按时间顺序列出,而是按字母排序的。

Git还提供可以创建带有说明的标签,用-a指定标签名,-m指定说明文字,格式为:
git tag -a 标签名 -m "message" //对标签进行描述
git show 标签名 //查看标签的描述信息

删除标签
git tag -d 标签名

推送标签
(1) 推送指定标签
git push origin v1.0

打开查看标签信息:

(2) 推送所有标签
git push origin --tags //推送所有标签

(3) 在本地删除远端仓库标签
- 先在本地删除标签,本地删除也是修改
git tag -d
- 推送到远端

此时我们发现远端标签成功被删除了:

总结远程仓库相关操作:
1. git clone --- 克隆仓库2. git remote [-v] --- 查看远程仓库信息
3. git push 远程仓库名 本地分支:远程分支 --- 向远程仓库推送
4. git pull 远程仓库 远程分支:本地分支 --- 拉取远程仓库
5. 配置命令别名:git config alias.xxx 命令
总结标签管理:
1. git tag 标签名 --- 创建标签
2. git tag --- 查看标签信息
3. git tag -d + 标签 --- 删除标签
4. git push 远程仓库 分支 --- 推送分支
相关文章:
【Git】--- Git远程操作 标签管理
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: Git 前面我们学习的操作都是在本地仓库进行了,如果团队内多人协作都在本地仓库操作是不行的,此时需要新的解决方案 --- 远程仓库。…...
Docker学习之服务编排(day9)
文章目录 前言一、问题描述二、解决方案1.安装Docker Compose1.1 [github下载相应版本](https://github.com/docker/compose/releases)1.2 将下载的文件移动到 /usr/local/bin 目录,确保它能够被系统识别为可执行文件1.3 赋予执行权限1.4 验证安装1.5 创建软链 2. 使…...
前后端常见模型以及相关环境配置介绍
一、前端常见框架 Vue.js 特点:采用数据驱动的响应式编程,组件化的开发模式使得代码结构清晰,易于维护,且学习成本相对较低,适合初学者和快速迭代的项目。应用场景:广泛应用于各类 Web 应用开发ÿ…...
职能型组织、项目型组织、矩阵型组织的介绍及优缺点比较
PMP考试中,经常会涉及到职能型组织、项目型组织、矩阵型组织的比较,下面简单介绍下职能型组织、项目型组织、矩阵型组织及其优缺点: 一、职能型组织 定义:以专业职能划分部门(如财务、技术、市场等)&…...
Java基本类型深度解析:从内存模型到高效编程实践
Java基本类型深度解析:从内存模型到高效编程实践 一、Java基本类型概述 Java作为强类型语言,定义了8种基本数据类型(Primitive Types),这些类型直接存储数据值而非对象引用,是构建Java程序的基础。它们的…...
论文阅读笔记——ST-4DGS,WideRange4D
ST-4DGS ST-4DGS 论文 在 4DGS 中,变形场 F \mathcal{F} F 与运动参数 X 和形状参数 ( S , R ) (S,R) (S,R) 高度耦合,导致训练时高斯表示紧凑型退化,影响动态渲染质量。由此,本文提出两种方法解耦运动与形状参数,保…...
[python]基于yolov8实现热力图可视化支持图像视频和摄像头检测
YOLOv8 Grad-CAM 可视化工具 本工具基于YOLOv8模型,结合Grad-CAM技术实现目标检测的可视化分析,支持图像、视频和实时摄像头处理。 功能特性 支持多种Grad-CAM方法实时摄像头处理视频文件处理图像文件处理调用简单 环境要求 Python 3.8需要电脑带有…...
五.ubuntu20.04 - ffmpeg推拉流以及Nginx、SRS本地部署
一.本地部署nginx 1.编译ffmpeg,参考这位博主的,编译选项有的enable找不到的不需要的可以直接删除,但是像sdl(包含ffplay)、h264、h265这些需要提前下载好,里面都有下载指令。 Ubuntu20.04 编译安装 FFmp…...
深度神经网络全解析:原理、结构与方法对比
深度神经网络全解析:原理、结构与方法对比 1. 引言 随着人工智能的发展,深度神经网络(Deep Neural Network,DNN)已经成为图像识别、自然语言处理、语音识别、自动驾驶等领域的核心技术。相比传统机器学习方法&#x…...
豪越科技消防一体化平台:打通消防管理“任督二脉”
在城市的车水马龙间,火灾隐患如潜藏的暗礁,威胁着人们的生命财产安全。传统消防管理模式在现代社会的复杂环境下,逐渐显露出诸多弊端。内部管理分散混乱,人员、装备、物资管理缺乏统一标准和高效流程;外部监管困难重重…...
【Matlab】-- 基于MATLAB的美赛常用多种算法
文章目录 文章目录 01 内容概要02 各种算法基本原理03 部分代码04 代码下载 01 内容概要 本资料集合了多种数学建模和优化算法的常用代码资源,旨在为参与美国大学生数学建模竞赛(MCM/ICM,简称美赛)的参赛者提供实用的编程工具和…...
机器学习课程
前言 课程代码和数据文件: 一、机器学习概述 1.1.人工智能概述 机器学习和人工智能,深度学习的关系 机器学习是人工智能的一个实现途径深度学习是机器学习的一个方法发展而来 达特茅斯会议-人工智能的起点 1956年8月,在美国汉诺斯小镇宁静…...
AIGC(生成式AI)试用 28 -- 跟着清华教程学习 - AIGC发展研究 3.0
目标:继续学习 - 信息不对称、不平等、隐私泄露和数据滥用 - 问、改、创、优 - “概率预测(快速反应)”模型和“链式推理(慢速思考)”模型 - 思维滞环现象解决思路:1.调整提问:改变问题方式&…...
问题:md文档转换word,html,图片,excel,csv
文章目录 问题:md文档转换word,html,图片,excel,csv,ppt**主要职责****技能要求****发展方向****学习建议****薪资水平** 方案一:AI Markdown内容转换工具打开网站md文档转换wordmd文档转换pdfm…...
【Java】面向对象之static
用static关键字修饰成员变量 有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。 直接用 类名访问即可。因为类只有一个,所以静态成员变量在内存区域中也只存在一份。所有的对象都可以共享这个变量…...
解决:在运行 plt.show()`时,程序会等待你手动关闭图片窗口才能继续往下执行
你这个问题本质是: 在运行 plt.show() 时,程序会等待你手动关闭图片窗口才能继续往下执行。 这其实是 matplotlib 的默认行为 —— 它会弹出一个交互式窗口让你“看完图再走”。 ✅ 为什么会这样? 你在程序中使用了: import mat…...
Anaconda安装-Ubuntu-Linux
1、进入Anaconda官网,以下载最新版本,根据自己的操作系统选择适配的版本。 2、跳过注册: 3、选择适配的版本: 4、cd ~/anaconda_download 5、bash Anaconda3-2024.10-1-Linux-x86_64.sh 6、按Enter或PgDn键滚动查看协议&…...
Linux 配置NFS服务器
1. 开放/nfs/shared目录,供所有用户查阅资料 服务端 (1)安装nfs服务,nfs-utils包中包含rpcbind(rpc守护进程) [rootnode1-server ~]# yum install -y nfs-utils # nfs-utils包中包含rpcbind [rootnode…...
css100个问题
一、基础概念 CSS的全称及作用是什么?行内样式、内部样式表、外部样式表的优先级?解释CSS的层叠性(Cascading)CSS选择器优先级计算规则伪类与伪元素的区别?举例说明!important的作用及使用注意事项如何继承父元素字体…...
塔能科技:用精准节能撬动社会效益的行业杠杆
在全球积极践行可持续发展理念的当下,能源高效利用与节能减排,已然成为各行各业实现高质量发展绕不开的关键命题。对企业来说,节能早已不是一道可做可不做的选择题,而是关乎生存与发展、社会责任与竞争力的必答题。塔能科技推出的…...
Java 大视界 -- Java 大数据在自动驾驶高精度地图数据更新与优化中的技术应用(157)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Conda配置Python环境
1. 安装 Conda 选择发行版: Anaconda:适合需要预装大量科学计算包的用户(体积较大)。 Miniconda:轻量版,仅包含 Conda 和 Python(推荐自行安装所需包)。 验证安装: co…...
nginx https配置
一.https配置 HTTPS 协议是由HTTP 加上TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。 1.生成证书 openssl genrsa -des3 -out server.key 20…...
每日一题洛谷P10901 [蓝桥杯 2024 省 C] 封闭图形个数c++
排序思想,只不过这时的排序与之前的略有不同,com函数中要先比较封闭图形再比较真实的大小,多了一步,但是原理还是一样的 #include<iostream> #include<algorithm> #include<vector> using namespace std; //统…...
拓展知识六:MetInfo6.0.0目录遍历漏洞原理分析
所需进行代码审计的文件路径: C:\phpStudy\WWW\MetInfo6.0.0\include\thumb.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\entrance.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\include\class\load.class.php C:\phpStudy\WWW\MetInfo6.0.0\app\system\include…...
tar包部署rabbitMQ
部署erlang: 有网使用: sudo apt-get update sudo apt-get install libncurses5-dev libncursesw5-dev sudo yum install ncurses-devel 无网使用 tar zxvf ncurses.tar.gz mkdir ncurses cd ncurses-6.3/ ./configure --with-shared --without-debu…...
天锐蓝盾终端安全防护——企业终端设备安全管控
从办公室的台式电脑到员工手中的移动终端,这些设备不仅是工作的得力助手,更是企业数据的重要载体。然而,随着终端设备的广泛使用,安全风险也如影随形。硬件设备使用不当、数据随意传输等问题频发,使得企业数据面临着泄…...
MySQL高级特性与大数据应用
事务与锁机制 1.1 事务控制 START TRANSACTION; UPDATE account SET balance balance - 500 WHERE user_id 1001; UPDATE account SET balance balance 500 WHERE user_id 2002; COMMIT; -- 显式提交事务 ROLLBACK; -- 异常时回滚 1.2 锁机制 锁类型:共…...
小智机器人关键函数解析,Application::OutputAudio()处理音频数据的输出的函数
以下是对 Application::OutputAudio() 函数的详细解释: 源码: void Application::OutputAudio() { // 扬声器的输出auto now std::chrono::steady_clock::now();auto codec Board::GetInstance().GetAudioCodec();const int max_silence_seconds 10;…...
玛卡巴卡的k8s知识点问答题(五)
17. Init 类型容器有什么特点,主要用途? 特点: 启动顺序:Init 容器在普通容器启动之前运行,必须先完成所有 Init 容器后,Pod 的主容器才会启动。 顺序执行:如果定义了多个 Init 容器ÿ…...

