【Git版本控制器--3】Git的远程操作

目录

理解分布式版本控制系统

创建远程仓库 

仓库被创建后的配置信息 

克隆远程仓库 

https克隆仓库 

ssh克隆仓库 

向远程仓库推送

拉取远程仓库 

忽略特殊文件 

为什么要忽略特殊文件? 

如何配置忽略特殊文件? 

配置命令别名

标签管理

理解标签 

标签操作


理解分布式版本控制系统

为什么要有分布式版本控制系统?

在之前的文章中,我们已经对Git的使用有了一个认知,但我们之前的git操作全部都是对本地仓库的管理,不管是分支管理还是基本操作...

本地仓库是保存在一台服务器中的。这意味着,假设你需要与你的同事一块进行多人开发,那么你和你的同事需要围在一台电脑上进行开发,那么这样子的开发不仅仅不会提高开发效率,甚至在某些情况下会降低开发效率!

所以我们需要有方式能够让你和你的同事在不同的电脑上拿到同一个仓库的内容,而在git中,分布式版本控制系统完美做到了!


什么是分布式版本控制系统?

在还没有分布式版本控制系统时,你需要与你的同事进行多人开发,那么其实也有方案:

你可以把你的本地仓库,原封不动的拷贝给你的同事,你的同事也可以把他的本地仓库原封不动的拷贝给你!这样就实现了不同主机之间可以拿到同一个仓库!

这种方案与本地仓库相比带来了好处:当你的本地仓库因为某些突发情况丢失时,你的同事那还有备份,提高了安全性!

但这种方案也有着一些问题:

  • 直接进行拷贝相对比较麻烦
  • 当你的同事因为某些原因,例如:生病了,离职了...时,你无法拿到你同事的本地仓库。这就带来了局限性

基于上述原因,我们不考虑这种将本地仓库直接拷贝的方案

第二种解决方案:

创建一个中央服务器。中央服务器的仓库中保存着项目的内容。中央服务器把你和你同事的电脑进行连接,这意味着你和你的同事可以在自己的计算机上对中央服务器仓库中的内容进行克隆。这样,你们能拿到同一个仓库!

当你对仓库的内容进行了修改时,你把你的修改完的仓库内容上传到中央服务器中,这个动作我们称之为推送!

当你需要拿到你同事的修改内容时,直接把中央服务器中你同事的仓库内容拿到本地,这个动作我们称之为拉取!

这种方案解决了第一种方案所产生的各种问题!这一套体系是集中式版本控制系统,即包含图中所有电脑的本地仓库与中央服务器仓库构成的一套系统!而git所提供的分布式版本控制系统的基础就是集中式版本控制系统,它包含了集中式版本控制系统的所有优点,但提供了比起这种方案更强大、更灵活的多人协作开发功能!

若我们维护一个仓库时,还需要手动架构一台中央服务器,那么成本是巨大的!

所以很多网站为我们提供了中央服务器的功能,例如github、码云...(后续用码云)

我们可以把自己的本地仓库推送到这些网站中,别人也能从这些网站中拉取我们的仓库,实现了多人协作的功能!所以这些网站充当的相当于中央服务器的角色


创建远程仓库 

当我们注册并登录上码云后,如下步骤:

 

 

仓库名称是必填项,并且仓库名称尽量与它的内容相对应!


仓库被创建后的配置信息 


ReadMe文件模板

ReadMe文件模板:当勾选该选项时,创建仓库后会自动生成一个ReadMe文件,ReadMe文件用于对该仓库的说明。自动生成的ReadMe文件有中英文两个版本

实际上,ReadMe文件就相当于一个使用说明书一样的东西!


成员管理 

仓库成员管理:在仓库页面的右上方可以对仓库的成员进行管理!说明一个仓库是能进行多人开发的

 如下为git手册中对成员身份的描述:


Issue文件

通过git对成员身份的描述可以发现,每一个成员都能创建一个名为Issue的东西

实际上Issue就是对该仓库中的某个事件进行描述的,比如说bug之类的!每一个人都能提交自己的Issue,并通知仓库管理员来解决

若在创建仓库时勾选了Issue模板文件,则新建Issue时如下:

新增Issue时有一些配置选项:

  • 负责人:该问题你需要通知谁来解决!
  • 标签:该Issue描述的是什么事件,可以填例如bug,duplicate...
  • 分支:你描述的问题是在哪个分支下发现的
  • .....

如下为创建好一个Issue时的样子:

当该问题被解决时,记得对Issue设置为已完成状态


Pull Request文件 

我们都知道,当一个分支的内容写完了,那么它需要合并到master分支上。

但不是什么内容都能被合并到master分支上的,假设你的代码中存在了很多bug,合并到master分支上,导致线上运行环境崩溃,那么就gg了。

但不是每一个开发人员都了解这些的,所以需要有硬性要求约束开发人员。

所以在合并之前,你需要询问仓库的管理员是否可以合并,若管理员同意,那么你才能进行合并操作! 

如何询问?提交一份Pull Request请求给管理员!

若在创建仓库时勾选了Pull Request文件模板,那么会在仓库中生成如下文件

这份文件是给开发人员看的,要求开发人员在提交Pull Request时的格式

如何提交一份Pull Request?


克隆远程仓库 

克隆远程仓库的协议有两个

  • https协议
  • SSH协议 

区别:

  • SSH克隆:使用SSH(Secure Shell)协议进行克隆,该协议通过加密技术保护数据传输过程中的机密性和完整性,防止数据被窃取或篡改。同时,SSH协议使用公钥加密技术进行身份验证,进一步增强了安全性,可以防止密码被盗取或猜测。
  • HTTP克隆:通过HTTP或HTTPS协议进行克隆,虽然HTTPS也提供了加密通信,但在身份验证方面相对较弱,通常依赖于用户名和密码进行验证,这可能存在被暴力破解或泄露的风险。
  • 总而言之SSH克隆比起https克隆更加安全

https克隆仓库 

复制完https的地址时,可以使用如下指令在Linux中克隆一份仓库: 

git clone [远程仓库地址(https)]

 注意:不要在本地仓库下直接进行clone操作,因为clone也会生成一份.git版本库,直接克隆会导致本地仓库下的.git被覆盖!

此时本地和远程仓库之间的结构图如下:

clone完以后会在本地生成一个对应的本地仓库!

origin表示远程仓库默认名称

查看远程仓库名称:(必须在仓库的工作区下)

git remote

查看更详细的信息可以使用-v选项 

使用-v选项会出现两个地址,与其相对应的权限

图上的内容为,我既有对远程仓库的拉取权限又有远程仓库的推送权限 


ssh克隆仓库 

SSH协议使用公钥加密技术进行身份验证。在配置SSH克隆时,用户需要在本地生成SSH密钥对,并将公钥添加到Git托管服务上。这样,在克隆仓库时,Git托管服务会使用公钥来验证用户的身份,确保只有授权的用户才能访问和克隆仓库。


如何配置公钥

第一步: 

第二步: 

第三步:填写公钥信息即可完成公钥的配置

标题:可以按照自己喜欢的设置

接下来的重点是获取我们本地服务器的公钥


获取本地服务器的公钥 

第⼀步:创建SSH Key。在用户主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有 id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。如果没有,需要创建 SSH Key: 

创建SSH Key:

ssh-keygen -t rsa -C "[邮箱]" 

输入完上述指令后一路回车即可! 

 注意:邮箱必须与我们在码云上配置的邮箱相同

经过配置之后,我们的家目录下就有了ssh文件,里面保存着公钥(id_rsa)和私钥(id_rsa.pub)

第二步:查看id_rsa.pub内容,并把查看到的内容复制到码云的公钥配置项上

弹出如下页面表示配置成功


ssh克隆仓库 

配置好公钥以后,我们就可以使用ssh的方式进行克隆了。流程几乎与https一样,如下步骤:

第一步:

第二步:

第三步:在Linux下输入如下指令

git clone [复制的内容]

向远程仓库推送

向远程仓库推送的整个过程:

  • 在工作区中对代码完成修改
  • 通过add操作把修改内容添加到暂存区
  • 通过commit操作把修改内容添加到master分支
  • 把master分支修改内容推送到远程仓库,即push操作

根据图中我们可以看出,实际上push操作是分支与分支之间的交互,即本地仓库中的master分支推送到远程仓库中的master分支,这两个分支不是同一个分支! 

push操作对应指令:

git push [远程仓库名] [本地分支名]:[远程分支名]

若本地分支名与远程分支名一致,那么可以把远程分支名进行省略 

注意:若采用的是ssh的方式进行push操作,那么无需输入用户名和密码,若是https的方式则需要输入用户名和密码!

 


拉取远程仓库 

 什么场景下需要拉取远程仓库?

假设你和你的同事一起开发了一个产品,并推送到了远程仓库中,此时你的仓库、你同事的仓库、远程仓库中该产品的版本都是version0版

突然某一天,你的同事开发了一个新的功能,此时你的同事的产品版本更新成了version1版,它把它的version1版的代码推送到了远程仓库中,远程仓库中产品的版本也变为了version1版,但你的仓库里面的版本是version0版,若你也需要拿到这个version1版,你就需要拉取远程仓库中的version1版本的代码! 


如何拉取?

拉取远程仓库中的内容:

git pull [远程仓库名] [本地分支名]:[远程分支名]

注意:pull不仅仅是拉取了远程仓库中的内容,而且还把拉取得内容与本地分支进行合并!

与push一样,若我们的本地分支名和远程分支名一样,那么远程分支名可以省略!


案例演示 

为了方便演示,我使用码云平台提供的代码编辑功能手动更新代码,如下方法:

修改后:

注意:实际开发中,不要手动编辑代码!

之后远程仓库中的代码被修改,我们在Linux中使用pull操作拉取远程仓库的内容


忽略特殊文件 

为什么要忽略特殊文件? 

在⽇常开发中,我们有些⽂件不想或者不应该提交到远端,⽐如保存了数据库密码的配置⽂件,那怎么让Git知道呢?在Git⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件,然后把要忽略的⽂件 名填进去,Git就会⾃动忽略这些⽂件了。

有人可能会说,假设是不想让配置文件进行提交,那么我们在add的时候不添加这些配置文件不就可以了吗?

实际上,这种方法硬要说的话也行!但在我们实际开发中,我们一般一次开发修改的是十几个文件,你难道要一个一个add吗?我们常用的方式是git add . 把当前目录所有修改内容都add。但若你add时恰好有一个配置文件被修改了,那不就上传到git了吗?


如何配置忽略特殊文件? 

在我们创建的时候有一个.gitignore模板,我们如果勾选了的话直接修改里面的内容就可以了!

但若我们没有勾选也没关系,我们直接在工作区创建一个.gitignore即可

接下来的问题是,.gitignore中的内容我们如何设置呢?


忽略某个特殊文件 

假设我们想忽略某一个特殊文件,我们直接直接在.gitignore中把该文件的文件名添加到.gitignore中

 

上图中,由于file.abc被ignore了,我们无法添加该文件


忽略某一类特殊文件 

除了忽略某一个特殊文件以外,我们还可以忽略一类文件,例如.efg结尾的文件,把*.efg添加到.gitignore中即可

我们在日常开发中,肯定不会这样指定一个被忽略的文件,一般都是被忽略的文件和要上传的文件放到一起,那么此时git不会提示,而是自动把被忽略的文件不放到暂存区,未被忽略的文件放到暂存区中 

 可以看到,只有file.txt被推送到了远程仓库中,而file.abc和file.efg都被忽略了


不忽略某个特殊文件 

注意:若我们想要强制添加被忽略的文件,可以在add时带上-f选项即可,

当然,若是add时带上-f选项,显然破坏了.gitignore的忽略规则,所以一般不建议这样使用,我们若只是想add一个特殊的文件,假设这个特殊的文件是test.abc,那么把!test.abc添加进.gitignore,此时就不会忽略这一个文件!

可以看到test.abc被成功添加到了暂存区中! 


.gitignore文件内容非常多,查看被忽略原因所在的行数

接下来的场景是假设你的.gitignore中的内容已经非常多了,你不知道具体忽略了哪些文件,git提供了方法可以让你查看到该文件被忽略原因在.gitignore中的第几行

查看被忽略的原因所在的地方:

git check-ignore -v [文件名]

 

 如图中,查看到file.efg被忽略原因是因为.gitignore中有一行是*.efg,行数是第二行,文件是.gitignore


配置命令别名

在我们实际开发中,可能有的git命令非常长,导致我们每次输入时的不方便,我们可以使用如下方法对git命令进行取别名

 配置全局命令别名:

git config --global alias.[新名字] '[老名字]'

例如:

有些时候,我们设置了命令别名可能自己也忘记了,可以通过如下方法查看所有的命令别名

查看配置的全局命令别名: 

git config --global --get-regexp alias

 例如:

若我们不想使用命令别名了,可以使用如下方法删除命令别名 

删除全局某个命令别名:

git config --global --unset alias.[命令别名]

例如:

 删除全局所有命令别名:

git config --unset-all

标签管理

理解标签 

什么是标签?

 git中,标签是用来标识某些特殊提交的一种记号,比如产品上线时的提交,一般都需要打上标签


为什么要有标签 

git中不是每一次提交的时候都有commit id吗?commit id能唯一标识一次提交,为什么还需要标签呢?

commit id vs 标签:

  • commit id:通过哈希算法得出来的,本身比较长,难以记忆!并且commit id都是无意义的一串字符
  • 标签:通过开发人员手动打上的标签,通常都要保证尽量简短且与提交内容有强关联!标签被设置出来就是有意义的,方便开发人员查看!
  • commit id 每一次提交都有,当提交过多时会导致难以查看。而只有当重要提交上传时才会打上标签,所以实际开发中打上标签的提交不会非常多,容易查看!

所以标签是针对重要的提交,我们可以为该提交打上标签,方便管理

例如:产品上线时的提交可以打上v1.0的标签,表示版本号!

对于开发人员来说,被打上标签的提交通常都是具有里程碑意义的!并且当开放人员想进行重要版本的回退时,可以根据标签迅速完成版本回退,提升了开发效率!


标签操作


本地操作 

添加标签:

git tag [标签名]

上述命令的默认行为是为我们最近一次提交打上标签

查看有哪些标签:

git tag

注意:添加标签后,会在.git/refs/tags目录下保存了名字与标签名相同的文件,这个文件的内容是commit id

示例:  

为非最新的提交打上标签:

git tag [标签名] [commit id]

有些时候,我们可能不仅仅需要添加标签,还需要添加对该标签的描述信息,可以使用如下方法:

标签描述:

git tag -a [标签名] -m"[标签描述]" [commit id]

 若不写commit id的话,默认是最近一次提交!

查看标签描述:

git show [标签名]

删除标签:

git tag -d [标签名]

示例:


远端操作 

 

标签也可以推送给远端仓库

推送一个标签:

git push [远程仓库名] [标签名]

推送所有标签:

git push origin --tags

若我们不需要远程仓库中的某一个标签,不建议直接在码云上手动删除,最好是先在本地删除,再把本地仓库与远程仓库进行同步:

 本地删除后与远程仓库的同步:

git push [远程仓库名] :[标签]
#本质是把本地的删除同步到远端

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ios打包:uuid与udid

ios的uuid与udid混乱的网上信息 新人开发ios,发现uuid和udid在网上有很多帖子里是混淆的,比如百度下,就会说: 在iOS中使用UUID(通用唯一识别码)作为永久签名,通常是指生成一个唯一标识&#xf…

中国认知作战研究中心:从认知战角度分析2007年iPhone发布

中国认知作战研究中心:从认知战角度分析2007年iPhone发布 中国认知作战研究中心:从认知战角度分析2007年iPhone发布 关键词 认知作战,新质生产力,人类命运共同体,认知战,认知域,认知战研究中心,认知战争,认知战战术,认知战战略,认知域作战研究,认知作…

Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件

地址:https://github.com/MartinxMax/Chameleon Chameleon 跨平台编译C文件,并一次性生成多个平台的可执行文件。可以通过编译Chameleon自带的.C文件反向Shell生成不同平台攻击载荷。 登录 & 代理设置 按照以下步骤设置 Docker 的代理: 创建配置目…

【机器学习】穷理至极,观微知著:微积分的哲思之旅与算法之道

文章目录 微积分基础:理解变化与累积的数学前言一、多重积分的高级应用1.1 高维概率分布的期望值计算1.1.1 多维期望值的定义1.1.2 Python代码实现1.1.3 运行结果1.1.4 结果解读 1.2 特征空间的体积计算1.2.1 单位球体的体积计算1.2.2 Python代码实现1.2.3 运行结果…

Kubernetes可视化界面

DashBoard Kubernetes Dashboard 是 Kubernetes 集群的一个开箱即用的 Web UI,提供了一种图形化的方式来管理和监视 Kubernetes 集群中的资源。它允许用户直接在浏览器中执行许多常见的 Kubernetes 管理任务,如部署应用、监控应用状态、执行故障排查以及…

【转帖】eclipse-24-09版本后,怎么还原原来版本的搜索功能

【1】原贴地址:eclipse - 怎么还原原来版本的搜索功能_eclipse打开类型搜索类功能失效-CSDN博客 https://blog.csdn.net/sinat_32238399/article/details/145113105 【2】原文如下: 更新eclipse-24-09版本后之后,新的搜索功能(CT…

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)

1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架,它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架! 官方网址:https://ffmpeg.org/ FFmpeg 的主要特点和功能: 编解码器支持: FFmpe…

Pyecharts之饼图与多饼图的应用

在数据可视化领域,饼图是一种常用的图表类型,特别适合展示数据的比例关系。Pyecharts 为我们提供了强大的饼图绘制功能,不仅可以轻松绘制各种饼图,还能对饼图的样式和数据标签进行深度定制,并且可以组合多个饼图以满足…

华为数据之道-读书笔记

内容简介 关键字 数字化生产 已经成为普遍的商业模式,其本质是以数据为处理对象,以ICT平台为生产工具,以软件为载体,以服务为目的的生产过程。 信息与通信技术平台(Information and Communication Technology Platf…

rocketmq-product-send方法源码分析

先看有哪些send方法 首先说红圈的 有3个红圈。归类成3种发送方式。假设前提条件,发送的topic,有3个broker,每个broker总共4个write队列,总共有12个队列。 普通发送。负载均衡12个队列。指定超时时间指定MessageQueue,发送&#…

新电脑安装系统找不到硬盘原因和解决方法来了

有不少网友反馈新电脑采用官方u盘方式装win10或win100出现找不到硬盘是怎么回事?后来研究半天发现是bios中开启了rst(vmd)模式。如果关闭rst模式肯定是可以安装的,但这会影响硬盘性能,有没有办法解决开启rst模式的情况安装win10或win11呢&…

蓝桥杯之c++入门(一)【第一个c++程序】

目录 前言一、第⼀个C程序1.1 基础程序1.2 main函数1.3 字符串1.4 头文件1.5 cin 和 cout 初识1.6 名字空间1.7 注释 二、四道简单习题(点击跳转链接)练习1:Hello,World!练习2:打印飞机练习3:第⼆个整数练习4&#xff…

Electron学习笔记,安装环境(1)

1、支持win7的Electron 的版本是18,这里node.js用的是14版本(node-v14.21.3-x86.msi)云盘有安装包 Electron 18.x (截至2023年仍在维护中): Chromium: 96 Node.js: 14.17.0 2、安装node环境,node-v14.21.3-x86.msi双击运行选择安…

【机器学习】自定义数据集使用框架的线性回归方法对其进行拟合

一、使用框架的线性回归方法 1. 基础原理 在自求导线性回归中,我们需要先自定义参数,并且需要通过数学公式来对w和b进行求导,然后在反向传播过程中通过梯度下降的方式来更新参数,从而降低损失值。 2. 实现步骤 ① 散点输入 有一…

微服务搭建----springboot接入Nacos2.x

springboot接入Nacos2.x nacos之前用的版本是1.0的,现在重新搭建一个2.0版本的,学如逆水行舟,不进则退,废话不多说,开搞 1、 nacos2.x搭建 1,首先第一步查询下项目之间的版本对照,不然后期会…

扣子平台音频功能:让声音也能“智能”起来

在数字化时代,音频内容的重要性不言而喻。无论是在线课程、有声读物,还是各种多媒体应用,音频都是传递信息、增强体验的关键元素。扣子平台的音频功能,为开发者和内容创作者提供了一个强大而灵活的工具,让音频的使用和…

全面了解 Web3 AIGC 和 AI Agent 的创新先锋 MelodAI

不管是在传统领域还是 Crypto,AI 都是公认的最有前景的赛道。随着数字内容需求的爆炸式增长和技术的快速迭代,Web3 AIGC(AI生成内容)和 AI Agent(人工智能代理)正成为两大关键赛道。 AIGC 通过 AI 技术生成…

【Uniapp-Vue3】动态设置页面导航条的样式

1. 动态修改导航条标题 uni.setNavigationBarTitle({ title:"标题名称" }) 点击修改以后顶部导航栏的标题会从“主页”变为“动态标题” 2. 动态修改导航条颜色 uni.setNavigationBarColor({ backgroundColor:"颜色" }) 3. 动态添加导航加载动画 // 添加加…

GitLab配置免密登录和常用命令

SSH 免密登录 Windows免密登录 删除现有Key 访问目录:C:\Users\Administrator\ .ssh,删除公钥:id_rsa.pub ,私钥:id_rsa 2.生成.ssh 秘钥 运行命令生成.ssh 秘钥目录( ssh-keygen -t rsa -C xxxxxx126.…

Spring Boot 自动配置

目录 什么是自动配置? Spring 加载 Bean ComponentScan Import 导入类 导入 ImportSelector 接口的实现类 SpringBoot 原理分析 EnableAutoConfiguration Import(AutoConfigurationImportSelector.class) AutoConfigurationPackage SpringBoot 自动配置流…