当前位置: 首页 > news >正文

使用 GitHub 远程仓库

使用 GitHub 远程仓库

GitHub 是最大的 Git 版本库托管商,是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub,很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。本篇文章主要带大家上手 GitHub 最基本的使用方式。

创建 Git 仓库

先登入 GitHub,再进入 GitHub 首页: https://github.com

点选右上角的使用者名称进入个人首页:

在这里插入图片描述

切换到 Repositories 后点击 New 按钮填写仓库名即可创建一个仓库:

在这里插入图片描述

在创建好后,我们就可以复制这个远程仓库地址,使用 git clone 命令把远程仓库下载到本地。

git clone 命令
将远程仓库复制到本地,并建立工作目录与本地仓库 (就是 .git 文件夹)

如果我们在创建的时候没有勾选 Initialize this repository with a README,那么创建出来是一个空仓库。

Github 中也有相关的提示:

在这里插入图片描述

远程仓库的添加

前面 创建 Git 仓库 部分我们只提到通过 clone 命令把远程空仓库下载到本地。那如果我们想要把本地的仓库与远程仓库建立关联呢?

比如说我们有个 localDemo 这个本地仓库,想要与远程的 https://github.com/dralexsander/remoteDemo.git 仓库建立关联,可以直接使用下面的命令:

git remote add origin https://github.com/dralexsander/remoteDemo.git

在这里插入图片描述

从上图可以看到执行完命令后没有任何输出,但其实它修改了 .git/config 这个文件。

在这里插入图片描述

多了一个 [remote “origin”] 的配置,这个 origin 的意思就是远程仓库的名字(就是我们通过 git remote add origin xxx 给 remoteDemo 这个远程仓库定义的名字,当然也可以改成 git remote add remoteDemo xxx)。url 就是这个远程仓库的地址,fetch 就是本地分支与本地追踪分支的对应关系,refs/heads 里存储本地分支,refs/remotes/origin 存储本地追踪分支。

事实上在我们的本地仓库中,可以建立多个远程仓库的关联。

比如说在我们当前本地仓库 remoteDemo 中,关联多一个 axios 的远程仓库,通过 git remote -v 命令可以查看目前在「工作目录」里的远程仓库信息

git remote add axios https://github.com/axios/axios.git

在这里插入图片描述

在 .git/config 文件中也多了 axios 远程仓库的配置:

在这里插入图片描述

不过,通常我们关联多个远程仓库的机会并不多,因此稍加了解顺便理解一下 origin 只是一个远程仓库的参照名称即可。

远程分支

我们先创建一个非空仓库,然后使用 git clone 命令将远程仓库复制到本地,深入看一下发生了什么。

在这里插入图片描述
在这里插入图片描述

Git 会自动帮我们配置好.git/config 文件里的远程仓库信息:

在这里插入图片描述

而且最明显的是我们的本地仓库上多了一个 remotes/origin/main 分支( remotes/origin/HEAD 是远程 main 分支的指针),通过 git branch -a 命令(不带 -a 参数展示的是本地的分支, -a 可以展示全部)查看:

在这里插入图片描述

我们先前学习过关于「分支」的概念,不过仅限于「本地分支」,今天我们多出了个「远程分支」,事情就相对复杂一些。

基本上,当我们的版本控制流程加上了远程仓库之后,原本的分支就可以被拆成四种不同的概念:

  1. 远程追踪分支

这个分支位于远程,目的是用来追踪分支的变化情形。通常远程分支我们是获取不到的。

  1. 本地追踪分支

当我们执行 git clone 复制一个远程仓库后,所有远程追踪分支会被下载回来,并且相对应的建立起一个同名的本地追踪分支。本地追踪分支反映了远程仓库在我们最后一次与它通信时的状态。

也就是这张图里的:

在这里插入图片描述

红色部分的 remotes/origin/main 就是本地追踪分支,remotes 标识是远程的意思,而 origin/ 是一种命名规范,main 就是分支名称,远程仓库的名称就是 origin(origin 是在 Git 版本控制中惯用的预设远程分支的参照名称)。

远程分支有一个命名规范 —— 它们的格式是:

<remote name>/<branch name>

  1. 本地分支

在执行 git branch 命令后所显示的分支,就是所谓的「本地分支」,这些分支存在于本地,而这些分支又常被称为 主题分支 (Topic Branch) 或 开发分支 (Development Branch),就是因为这些分支不会被推送到远程仓库,主要用来做开发用途。

  1. 远程分支

顾名思义,远程分支就是在远程仓库中的分支,如此而已。如果我们用 GitHub 的话,我们是无法存取远程分支的。

虽然说「概念上」可以分为这四类,但其实这些分支就只是参照名称而已,而前面提到的「本地追踪分支」主要就是用来跟远程的分支做对应,我们不应该直接在这些分支上建立版本 (虽然我们还是可以这么做,但强烈不建议乱搞),而是把这些「本地追踪分支」视为是一种只读的分支。

分支推送

clone 项目

经过前面的学习,我们知道在 clone 一个新的 Git 仓库时,都会有一个预设 main 分支。实际上,这个分支通常用来当作目前系统的「稳定版本」,也就是这个版本必须是干净且高品质的原始码版本。所以,我们会要求所有人都不要用这个分支来建立任何版本,真正要建立版本时,一定会通过「合并」的方式来进行操作,以确保版本能够更容易被追踪。

在开发阶段,我们通常会从 main 分支中新建一个分支用来开发:

git checkout -b dev

在这里插入图片描述

此时我们新建分支并未跟远程仓库建立起任何关联,Git 可能不知道我们到底想推送到哪里(可能存在多个远程仓库),我们直接执行 git push 命令的话 Git 就会提示错误,所以我们要另外定义本地分支与远程仓库之间的关系。

在这里插入图片描述

要将本地分支起跟远程仓库的建立起对应关系,只要在 git push 的时候加上 --set-upstream 参数,即可将本地分支注册进 .git/config 文件中,之后就能用 git push 就可以顺利的推送上去。

在这里插入图片描述

.git/config 文件:

在这里插入图片描述

上图中的 remote 和 merge 所代表的意思是:「当我们想要将本地的 dev 分支推送到远程仓库时,预设的远程仓库为 origin 这个(因为可以关联多个远程仓库,因此需要指定),然后推送的时候要将本次的变更合并到 merge 字段对应这个远程分支里。

我们在一开始执行 git clone 的时候,Git 就会预设帮我们建立好 main 分支的对应关系,所以针对 main 分支进行操作时,不需要额外加上 --set-upstream 就能使用。

本地关联项目

如果我们是直接本地仓库与远程仓库建立关联的,这个时候情况可能不一样。

我们用回之前的 remoteDemo 示例,前面我们只介绍了如何与远程仓库建立关联(git remote add),如果此时我们执行 git branch -a 命令查看分支,可以发现并不存在本地追踪分支,这是因为远程仓库是空的,根本不存在任何分支:

在这里插入图片描述

此时我们就需要执行 git push --set-upstream origin master 命令来建立与远程仓库的分支关联:

在这里插入图片描述

我们来详细说明一下这个打印:

在执行 push 命令时会扫描 .git/objects 目录,也就是之前我们之前文章中提到的 Git 的对象,然后把这些对象放入到远程仓库中(同步版本)。但是由于远程仓库的空的,因此也创建了一个 master 分支并在本地设置了一个追踪分支。

我们查看 .git/refs 目录就可以看到新建了一个 remotes 目录,里面的内容就是本地追踪分支。

在这里插入图片描述

这时候在执行 git branch -a 命令就会发现存在红色的 remotes/origin/master 分支了:

在这里插入图片描述

此时本地分支与本地追踪分支都是同步的,我们可以通过 git log 命令来查看:

在这里插入图片描述

代码拉取

这部分需要结合前面 远程分支 部分一起讲解,我们在 clone 一个远程仓库后,所有远程追踪分支会被下载回来,并且相对应的建立起一个同名的本地追踪分支。如果远程仓库更新了几个版本后,我们的本地追踪分支相较于远程仓库其实就落后了几个版本,此时我们就要更新本地追踪分支的状态。

fetch

git fetch 命令完成了仅有的但是很重要的两步:

  • 从远程仓库下载本地仓库中缺失的提交记录
  • 更新本地追踪分支指针(如 remote/origin/main )

git fetch 实际上将本地仓库中的远程分支更新成了远程仓库相应分支最新的状态。

前面我们说过的,本地追踪分支反映了远程仓库在我们最后一次与它通信时的状态,git fetch 就是我们与远程仓库通信的方式!

我们用一个可视化来更好理解 fetch 命令:

在这里插入图片描述

我们一开始 clone 项目后分支状态类似上面这张图,此时我们在远程仓库中提交一个版本后在本地仓库中执行 git fetch 命令。
在这里插入图片描述

可以看到只有本地追踪分支( remote/origin/main )才更新了状态,本地的 main 分支并没有更新,如果我们需要更新本地 main 分支,需要手动使用 git merge 命令去合并本地追踪分支( remote/origin/main )。

示例

概念理解了我们来看一下示例:

在这里插入图片描述

本地分支与本地追踪分支都是同步的(最新「commit 对象」的 hash 值为 bcbe312…),此时我们在远程仓库中提交一次 commit:

在这里插入图片描述

远程仓库最新的 commit hash 值为 62ed650。

我们执行 git fetch 命令更新本地追踪分支:

在这里插入图片描述

此时 remotes/origin/master 领先 master 分支一个提交,我们切换到 remotes/origin/master 分支查看提交日志能更清楚的看到差异:

在这里插入图片描述

在这种情况我们就需要执行 git merge remotes/origin/master 命令来更新 master 分支:

在这里插入图片描述

pull

git pull 就是 git fetch 和 git merge 的缩写,会自动帮我们更新本地追踪分支和本地分支。

在这里插入图片描述

在这篇文章里只简单介绍一下 fetch、pull 的操作,后续我们会详细介绍。

相关文章:

使用 GitHub 远程仓库

使用 GitHub 远程仓库 GitHub 是最大的 Git 版本库托管商&#xff0c;是成千上万的开发者和项目能够合作进行的中心。 大部分 Git 版本库都托管在 GitHub&#xff0c;很多开源项目使用 GitHub 实现 Git 托管、问题追踪、代码审查以及其它事情。本篇文章主要带大家上手 GitHub …...

关键词提取

在自然语言处理领域中&#xff0c;处理海量文本信息的关键在于把用户关心的问题提取出来。而关键词是能够表达文档中心内容的词语&#xff0c;更是表达文档主题的最小单位。因此&#xff0c;文本关键词的提取对于文本信息的理解是至关重要的。 关键词提取是文本挖掘领域下的一个…...

web开发学习笔记(2.js)

1.引入 2.js的两种引入方式 3.输出语句 4.全等运算符 5.定义函数 6.数组 7.数组属性 8.字符串对象的对应方法 9.自定义对象 10.json对象 11.bom属性 12.window属性 13.定时刷新时间 14.跳转网址 15.DOM文档对象模型 16.获取DOM对象&#xff0c;根据DOM对象来操作网页 如下图…...

Vue Axios——前端技术栈

文章目录 基本介绍Vue是什么&#xff1f; MVVMVue的使用快速入门注意事项和使用细节 Vue 数据绑定机制分析数据单向渲染注意事项和细节 双向数据绑定事件绑定示例&#xff1a;注意事项和使用细节课后作业1课后作业2 修饰符示例 条件渲染/控制: v-if v-showv-if VS v-show课后作…...

九、Qt C++ 数据库开发

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …...

力扣电话号码的组合

文章目录 题目说明做题思路代码实现代码解析 题目链接 题目说明 首先我们先分析一下这个题目题目中说呢先给出一个字符串这个字符串其实就是这个九键数字我们要按照要求将数字所代表的字符进行自由组合形成一个字符串并且这个字符串的长度和输入的数字字符串长度相同&#xff0…...

ZooKeeper 实战(五) Curator实现分布式锁

文章目录 ZooKeeper 实战(五) Curator实现分布式锁1.简介1.1.分布式锁概念1.2.Curator 分布式锁的实现方式1.3.分布式锁接口 2.准备工作3.分布式可重入锁3.1.锁对象3.2.非重入式抢占锁测试代码输出日志 3.3.重入式抢占锁测试代码输出日志 4.分布式非可重入锁4.1.锁对象4.2.重入…...

基于kubernetes部署MySQL主从环境

部署方式 通过部署mysql主从容器&#xff0c;配置主从pod之间数据同步。 配置数据库访问的密码 创建 Mysql 密码的 Secret [rootk8s-master1 master]# kubectl create secret generic mysql-password --namespaceapp --from-literalmysql_root_passwordroot secret/mysql-pas…...

【JAVA语言-第13话】异常处理 之 try-catch-finally,throws,throw关键字的详细解析

目录 异常处理 1.1 概述 1.2 异常分类 1.3 异常处理 1.3.1 throws 1.3.2 try-catch 1.3.3 finally代码块 1.3.4 throw关键字 1.3.5 throw和throws的区别 1.4 自定义异常 1.4.1 概述 1.4.2 定义 1.4.3 自定义异常练习 异常处理 1.1 概述 在Java中&#xff0c;异常…...

ChatGPT4.0 >ChatGPT 3.5 > 文心一言

文章目录 前言一、ChatGPT4.0与ChatGPT3.5相比具有以下优点&#xff1a;二、ChatGPT和文心一言相比具有以下优点&#xff1a;总结 前言 ChatGPT是一种基于自然语言处理的对话型人工智能模型&#xff0c;由OpenAI开发。它是使用了大规模的语料库进行无监督学习的结果&#xff0…...

Linux 入门命令大全汇总 + Linux 集锦大全 【20240115】

文章目录 Linux 入门命令大全汇总Linux 集锦大全更多信息 Linux 入门命令大全汇总 别有一番风趣的alias 刚刚好合适的 apropos 命令 迷你计算器 bc 可看黄道吉日的 cal 全文可查看&#xff1a; Linux入门命令大全全文 Linux 集锦大全 linux终端中最漂亮的几款字体介绍及…...

【Web】NSSCTF Round#16 Basic个人wp(全)

出题友好&#xff0c;适合手生复健。 目录 ①RCE但是没有完全RCE ②了解过PHP特性吗 ①RCE但是没有完全RCE 上来就是一段md5八股 (string)就是不让用数组了&#xff0c;然后强比较需要md5碰撞 ?md5_1%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc…...

【目标跟踪】跨相机如何匹配像素

文章目录 前言一、计算思路二、代码三、结果 前言 本本篇博客介绍一种非常简单粗暴的方法&#xff0c;做到跨相机像素匹配。已知各相机内外参&#xff0c;计算共视区域像素投影&#xff08;不需要计算图像特征&#xff09;。废话不多说&#xff0c;直接来&#xff0c;见下图。…...

Python 发微信:实现自动化沟通的利器

引言&#xff1a; 在当今信息爆炸的时代&#xff0c;微信已经成为人们日常生活中不可或缺的沟通工具。然而&#xff0c;手动发送微信消息往往耗时耗力&#xff0c;尤其是在需要频繁发送消息的场景下。为了提高工作效率和便利性&#xff0c;我们可以利用 Python 编程语言来实现自…...

计算机网络——HTTP协议

1. HTTP的概述 HTTP&#xff08;超文本传输协议&#xff09;&#xff0c;定义在RFC2616中&#xff0c;是用于分布式和协作式多媒体系统之间交互的应用层通信协议。 1.1 无状态 HTTP是一个无状态协议&#xff0c;意味着它不保存先前交互的记录。每个请求都独立于其他请求处理。…...

QT上位机开发(利用tcp/ip访问plc)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 plc是工控领域很重要的一个器件。简单的plc一般就是对io进行控制&#xff0c;但是复杂的plc&#xff0c;还可以控制电机、变频器&#xff0c;在工业…...

MySQL-多表连接查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…...

Qt第二周周二作业

代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void paintEvent(…...

docker 学习命令整理

文章目录 docker 学习命令整理(积累中...)0. 启动/停止1. 运行2. 查看运行中docker3. 删除指定container4. 查看本地镜像5. 拉取指定镜像6. 新起终端进入同一container7. 取消sudo8. 查看docker状态9. 查看docker存储10.删除镜像11.删除容器12. qemu12.1 安装12.2 卸载qemu 附&…...

windows安装RabbitMq,修改数据保存位置

1、先安装Erlang&#xff0c; Erlang和RabbitMQ有版本对应关系。 官网RabbitMQ与Erlang版本对应RabbitMQ Erlang Version Requirements — RabbitMQ 2、安装RabbitMQ。 3、修改数据保存地址。找到安装目录下的sbin文件夹&#xff0c;找到rabbitmq-env.bat&#xff0c;编辑文件…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...