从0到1学会Git(第三部分):Git的远程仓库链接与操作
写在前面:前面两篇文章我们已经学会了git如何在本地进行使用,这篇文章将讲解如何将本地的git仓库和云端的远程仓库链接起来并使用
为什么要使用远程仓库:因为我们需要拷贝我们的代码给别人以及进行协同开发,就需要有一个云端仓库进行代码的存储和同步,所以我们使用远程仓库来完成该目标。
1.常用的托管服务(远程仓库)
1.1 GitHub(开源):属于国外网站,容易上不去
1.2 GitLab:自己搭建,属于公司使用较为常用的
1.3 Gitee:码云,国内第三方提供,使用较多(也是本篇文章所使用的远程云端仓库)
2.使用码云
完成正常网站都需要的注册登录后,我们需要的是创建一个我们自己的仓库
2.1 创建一个云端仓库
在我们个人主页的右上角选择新建一个仓库

输入仓库的名称和仓库的介绍,点击创建仓库

然后下面这三个选项,我们全部不选,保持默认即可,因为我们的本地仓库已经实现了配置

可以看到我们的仓库已经建立完成了

2.2生成ssh公钥
首先进入我们本地的仓库,打开git bash。使用下列指令来获得我们本地的SSH公钥
ssh-keygen -t rsa
输入上述指令然后一路回车即可。
效果展示:
我们进入到我们的本地仓库中来,然后执行该命令

然后我们执行完命令后,问yes或者no或者让你按enter,通通可以不用管,按回车一直往下就可以了。

执行下列命令获得我们的公钥:
cat ~/.ssh/id_rsa.pub
获得我们的公钥,然后将其复制下来。

2.3将本地仓库和码云账户进行关联
进入我们码云的设置

我们在这里面选择SSH公钥:

将我们生成的公钥放到这里面来,他会自己生成一个标题,我们可以选择重新设置一个,这个不会产生什么影响

点击保存实现对公钥的配对。

在我们的本地仓库中输入以下指令,可以知道我们的配置是否成功
ssh -T git@gitee.com

然后因为你是第一次访问这个网址,他会对你进行询问,我们选择输入yes,然后看到下面弹出来的successfully即可知道我们已经完成了ssh协议的配对.
3.将本地仓库和远程仓库进行添加和配送操作(附带链接操作):
使用下列命令完成本地仓库和云端远程仓库配对的功能。
git remote add origin SSH地址(这里是你云端仓库ssh协议copy的地址)
我们进入自己的仓库,然后选择SSH协议,将其中的SSH地址给复制下来

然后我们使用上述命令:告诉本地仓库,远程仓库是什么,其中origin是名称的意思,指的是你想连接的远程仓库你想把它叫做什么,我们直接取默认的origin即可,不需要进行改变 。
如果出现以下问题:

表明我们在git bash执行的文件夹不是一个本地仓库文件,如果要将该文件夹和云端仓库进行链接,需要先执行一下git init将该文件夹生成为一个本地仓库即可。
如果输入完连接指令,没有任何的提醒,即实现了连接。
如何将我们本地的代码提交上去
git push origin master
把master分支提交到了origin仓库里:

第一次提交的时候会出现提示这种情况,出现这样表示我们的本地仓库已经提交成功了。
完整的指令为:
git push [-f][--set-upstream][远端名称[本地分支名][:远端分支名]]
-f表示的是强制覆盖,即本地代码强行覆盖云端代码
–set-upstream 表示推送到远端的同时并且建立起和远端分支的关联关系
如果当前分支已经和远端分支关联,可以省略分支名和远端名
直接
git push
将master分支推送到已关联的远端分支

此时表明的是我们没有将两个分支进行捆绑起来,所以我们先使用
git push --set-upstream origin master:master
然后再次使用git push即可
我们使用git branch -vv即可查看到我们各个分支的关系

4.从远程仓库克隆
git clone <仓库路径>[本地目录]
我们使用一个全新的文件夹来实现这个操作

我们新建一个test2文件夹来进行此操作,将此链接复制下来

然后输入
git clone 链接
或者git clone <仓库路径>[本地目录]
则会直接在当前目录下克隆下来一个仓库

进去即可得到我们克隆下来的本地仓库
可以看到只有master分支,没有dev分支,因为我们的远程仓库只存了master分支而没有存dev分支

5.从远程仓库中抓取和拉取
抓取和拉取的区别:抓取是把云端代码拉下来,然后需要人为进行合并。拉取是把云端代码拉下来,直接进行合并。
抓取:将仓库里的更新抓取到本地,不会进行合并
remote name就是origin
git fetch [remote name][branch name]
拉取:将远端仓库的修改拉取到本地并自动进行合并,等同于fetch+merge
git pull [remote name][branch name]
上传操作(位于test1文件夹下,我们首先往云端里面新建增加一个文件,以达到在test2文件夹下面的文件和云端仓库文件不一样的效果):

在这里执行了git push之后可以看到master分支和origin里面的master分支实现了同步的功能。

拉取操作(test2文件夹下):

现在在test2下面是没有file04.txt文件的,然后我们将其拉取下来


可以看到已经有了file04,但是master里面没有file04文件


然后我们把远程的分支合并过来,可以看到文件夹下已经有了file04

抓取操作(test2文件夹下,因为已经实现了文件的一致,所以题主偷懒,就直接不放图片了):
git pull
实现效果:git pull ==git fetch + git merge
6.远程冲突问题解决
用户a和b同时对文件c的第1行进行了更改,然后a进行了提交到云端仓库,b在进行提交的时候就会提醒出现问题。因为两行代码不同,会出现冲突问题。
解决方案:当b提交时出现报错后,先执行git pull,然后对代码进行修改,在执行git push即可。
7.有关git push和git pull的一点理解(主观性较强,可以不看)
解决冲突问题的核心其实就是会出现不一致的问题,所以建议在进行更改代码的时候(即不知道有没有人对有关代码进行更改),先执行git pull操作,再执行git push操作,就不会出现报错问题。题主是这么理解的,远程仓库会检测是谁执行了最后一次的git push操作(以仓库为单位,其实也就是以文件夹为单位),如果检测到是此本地仓库执行的,则执行git push操作会直接成功,相当于它意识到除了此本地仓库以外没有人更改了代码,只有你这个本地仓库在改代码,所以他会直接的默认覆盖or删除or修改操作。如果检测不是此本地仓库执行了最后一次的git push操作,则他会默认你没有拿到最新的云端仓库,已经有人对里面的代码进行了更改,所以你提交的git push操作里面,可能把上一个人的操作给覆盖了,即上一个人的操作你没有看到,可能会出现无意识的覆盖,此操作很危险,会出现问题,所以会报错。需要你git pull下来后,看到最新的代码,在执行git push才可。这也就是很多人说的,先pull在push的原因。
为了更好的理解这个问题,题主做了以下测试来进行验证:
首先我们新添加一个本地仓库test3,然后把云端仓库(也就是和test1保持一致的那个文件央视)克隆下来。

然后我们对文件的内容进行修改:

进行git push上去,发现没有问题(因为发现它git pull拉取下来后,没有人再进行新的push,即获得到了最新的版本文件,所以可以直接进行提交),所以直接push上去没有任何问题

我们在回到我们的test1文件夹(即最开始和云端仓库保持一致的文件夹):
可以发现里面的内容还是之前修改之前的内容,所以此时没有和云端仓库的内容保持一致。

我们修改他的内容。

然后提交到本地仓库。

然后在push到云端仓库的时候发生了报错,因为他检测到有别的本地仓库对里面的数据进行了更改,然后test1仓库没有进行pull操作,即没有拿到最新的仓库,所以会报错。

我们进行拉取操作

可以看到里面因为冲突,已经变成和本地仓库一样的问题了(即冲突之后,会将文件合并在工作区而不是本地仓库里,如果觉得有点饶,可以去看题主的git的第二部分的文章)

然后我们啥都不做,继续push,可以发现,仍然不行,因为我们的冲突问题依然存在,而解决后的问题的文件在工作区中,而不在本地仓库里面。

我们先将文件放到本地仓库中,然后执行git push操作,可以看到,已经成功的将文件上传了。

我们再将test1仓库下面的文件进行修改。

然后在不pull的情况下,将其再次提交上去,发现我们已经可以直接push了,因为检测到上一次git push的仓库就是test1,它默认test1用的就是最新的仓库,所以再次使用push操作不需要先拉取。

总结:如果对云端仓库的最后一次push操作是此仓库干的,则此仓库下次push不需要先进行pull操作。如果最后一次操作不是本仓库干的,则需要进行pull操作,且pull完成后需要先把文件放到本地仓库(因为可能会出现本地仓库冲突问题),为了保险起见,可以每次pull完,对数据处理完毕,进行一波add操作和commit操作,再进行push操作即可。(附:如果最后一次push操作是此仓库所操作的,则下次执行git pull不会有任何作用,因为云端仓库会认为,您已经有了最新的仓库,而您后续的操作是您想干的,他不会帮您更改文件内容or修复删除的文件?)
写在最后:码字不易,点个赞再走把
相关文章:
从0到1学会Git(第三部分):Git的远程仓库链接与操作
写在前面:前面两篇文章我们已经学会了git如何在本地进行使用,这篇文章将讲解如何将本地的git仓库和云端的远程仓库链接起来并使用 为什么要使用远程仓库:因为我们需要拷贝我们的代码给别人以及进行协同开发,就需要有一个云端仓库进行代码的存储和同步&a…...
虚拟机Ubuntu操作系统常用终端命令(1)(详细解释+详细演示)
虚拟机Ubuntu操作系统常用终端命令 本篇讲述了Ubuntu操作系统常用的三个功能,即归档,软链接和用户管理方面的相关知识。希望能够得到大家的支持。 文章目录 虚拟机Ubuntu操作系统常用终端命令二、使用步骤1.归档1.1创建档案包1.2还原档案包1.3归档并压缩…...
redis实战-redis实现异步秒杀优化
秒杀优化-异步秒杀思路 未优化的思路 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是否是一…...
Python爬虫-IP隐藏技术与代理爬取
前言 在进行爬虫程序开发和运行时,常常会遇到目标网站的反爬虫机制,最常见的就是IP封禁,这时需要使用IP隐藏技术和代理爬取。 一、IP隐藏技术 IP隐藏技术,即伪装IP地址,使得爬虫请求的IP地址不被目标网站识别为爬虫。…...
二刷力扣--链表
链表 链表类型: 单链表(可以访问后面的一个节点) 双链表(可以访问前后节点) 循环链表(最后一个节点指向首节点) 在Python中定义单链表节点: class ListNode:def __init__(self, v…...
返回值加const ,为了不拷贝得到成员的值,但被赋值的左值也要const
1. getA 函数返回值 什么都不加,也改不了c里面a的指针指向 why?返回成员变量时,会复制一下。 返回成员变量时,一般会赋值一下没有RVO_地摊书贩的博客-CSDN博客 2. getA 函数返回值 加了引用, 就没有复制 3. getA 函数…...
本地如何使用HTTPS进行调试
在现代前端开发中,HTTPS已经成为不可或缺的一部分,因为它在保护用户数据和确保网站安全性方面发挥着关键作用。然而,有时在本地开发过程中启用HTTPS可能会变得有些复杂。在本文中,我们将介绍如何轻松地在本地进行HTTPS调试&#x…...
观察者模式:对象之间的订阅机制
欢迎来到设计模式系列的第十三篇文章!在之前的文章中,我们学习了许多常用的设计模式,今天我们将介绍观察者模式,它是一种行为型设计模式,用于定义对象之间的一对多依赖关系,当一个对象的状态发生变化时&…...
【1462. 课程表 IV】
来源:力扣(LeetCode) 描述: 你总共需要上 numCourses 门课,课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite ,其中 prerequisites[i] [ai, bi] 表示如果你想选 bi 课程,你…...
Kerberos 身份验证
简介 Kerberos 是一种由 MIT(麻省理工大学)提出的一种基于加密 Ticket 的身份认证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证,用于验证用户或主机的标识。。 适用范围:Windows Server 2022、Window…...
R语言贝叶斯METROPOLIS-HASTINGS GIBBS 吉布斯采样器估计变点指数分布分析泊松过程车站等待时间...
原文链接:http://tecdat.cn/?p26578 指数分布是泊松过程中事件之间时间的概率分布,因此它用于预测到下一个事件的等待时间,例如,您需要在公共汽车站等待的时间,直到下一班车到了(点击文末“阅读原文”获取…...
通付盾入选2023年度“上市苗圃工程”重点企业
近日,2023年度苏州工业园区企业上市苗圃工程认定名单公示,江苏通付盾科技有限公司成功入选园区“上市苗圃工程”重点企业。 2023年第一批次苗圃企业认定结果: 企业上市苗圃工程 上市企业是衡量地方综合经济实力的重要标尺,也是区…...
SpringMVC之文件上传下载
SpringMVC是一个基于Java的Web框架,它提供了一套用于构建Web应用程序的开发模型。在SpringMVC中,文件上传和下载是常见的功能之一。 SpringMVC文件上传和下载的介绍: 介绍文件上传: 在SpringMVC中,文件上传功能可以通…...
嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析
在上一篇文章IAR中ICF链接文件详解和实例分析中,我通过I.MX RT1170的SDK中的内存映射关系,分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说,IAR和Keil用得比较多,所以这一篇文章就来分析一下Keil的分散文件.scf(scat…...
Linux防火墙常用操作及端口开放
Linux防火墙常用操作及端口开放 1.查看防火墙状态 firewall-cmd --state 2.开启防火墙 systemctl start firewalld.service 3.开启指定端口 firewall-cmd --zonepublic --add-port3306/tcp --permanent firewall-cmd --zonepublic --add-port6379/tcp --permanent 显示success表…...
[JAVAee]Linux上的javax.mail报错
我们把在window写的项目部署到Linux上的Tomcat时,如果发现使用不了了,该如何找到错误呢?找到报错的地方在哪呢? 在Linux环境下来到Tomcat目录下的logs目录,输入: tail -f catalina.out -n 500 tail 就是把文件的末尾几行读取到终端上,并会持续刷新 -f 循环读取 catalina.ou…...
开学季|校园迎新哪家强?VR全景来导航
九月开学迎新季,各大高校的迎新活动开展的如火如荼,随着科技的不断进步,高校为了更好的开展迎新活动,让新生们尽快熟悉新的校园和生活,会利用VR全景技术带领着新生进行校园游览,给予新生们巨大便利的同时&a…...
el-checkbox-group限制勾选数量
<!--* Description: 视频监控 页面* Author: mhf* Date: 2023-08-15 13:26:33 --> <template><div class"videoSurveillance"><el-row :gutter"24"><el-col :span"4"><div class"videoSurveillance-left&…...
【JavaScript】WebAPI入门到实战
文章目录 一、WebAPI背景知识1. 什么是WebAPI?2. 什么是API? 二、DOM基本概念三、获取元素三、事件初识1. 点击事件2. 键盘事件 四、操作元素1. 获取/修改元素内容2. 获取/修改元素属性3. 获取/修改表单元素属性4. 获取/修改样式属性 五、操作节点1. 新增…...
奥康的高尔夫鞋,圈不住投资者的心
文 | 螳螂观察 作者 | 青月 鞋服行业终于熬过了“寒冬”,2023年行业景气度开始逐步回暖。 东方财富Choice数据显示,截至8月17日,已有28家鞋帽服装类上市公司发布了2023年中期业绩预告或快报,其中,9家预增࿰…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
