【Git】(基础篇四)—— GitHub使用

news2024/9/21 19:39:38

GitHub使用

经过上一篇的文章,相信大家已经对git的基本操作熟悉了,但哪些使用git的方法只是在本地仓库进行,本文介绍如何使用git和远程仓库进行连接使用。

Github和Gitee

主要用到的两个远程仓库在线平台是github和gitee

GitHub

GitHub 是全球最大的代码托管平台之一,由 GitHub Inc. 运营,后来被微软收购。它不仅是一个代码仓库,还是一个社交编程网站,用户可以关注其他开发者、创建组织和团队、管理项目等。GitHub 提供了免费的公共仓库和付费的私有仓库选项,以及一系列的开发工具和集成服务。

Gitee(码云)

Gitee 是中国的代码托管平台,类似于 GitHub,但它针对中国用户进行了优化,提供了更快的数据传输速度和更好的中文支持。Gitee 同样支持公共和私有仓库,提供项目管理、代码审查、持续集成等功能。由于其在中国的服务器位置,Gitee 在国内访问速度通常比 GitHub 快。

使用Gitee对于中国人更加友好,但如果你英语过关的话,可以尝试去github上面看看,github上面的项目更多,尤其是一些涉及前沿技术的项目。下面的示例我也将使用github进行展示,在熟练使用github之后,gitee的使用就会非常简单了。

Github基本概念

在github中打开一个项目之后,其中会包含一些菜单选项

在这里插入图片描述

Repository:仓库的意思,即你的项目,你想在 GitHub 上开源一个项目,那就必须要新建一个 Repository,如果你开源的项目多了,你就拥有了多个 Repositories 。

Issue:问题的意思,举个例子,就是你开源了一个项目,别人发现你的项目中有bug,或者哪些地方做的不够好,他就可以给你提个 Issue ,即问题,提的问题多了,也就是 Issues ,然后你看到了这些问题就可以去逐个修复,修复ok了就可以一个个的 Close 掉。

Star:这个好理解,就是给项目点赞,但是在 GitHub 上的点赞远比微博、知乎点赞难的多,如果你有一个项目获得100个star都算很不容易了!

**Fork:**这个不好翻译,如果实在要翻译我把他翻译成分叉,什么意思呢?你开源了一个项目,别人想在你这个项目的基础上做些改进,然后应用到自己的项目中,这个时候他就可以 Fork 你的项目,这个时候他的 GitHub 主页上就多了一个项目,只不过这个项目是基于你的项目基础(本质上是在原有项目的基础上新建了一个分支,分支的概念后面会在讲解Git的时候说到),他就可以随心所欲的去改进,但是丝毫不会影响原有项目的代码与结构。

Pull Request:发起请求,这个其实是基于 Fork 的,还是上面那个例子,如果别人在你基础上做了改进,后
来觉得改进的很不错,应该要把这些改进让更多的人收益,于是就想把自己的改进合并到原有项目里,这个时候他就可以发起一个 Pull Request(简称PR) ,原有项目创建人就可以收到这个请求,这个时候他会仔细review你的代码,并且测试觉得OK了,就会接受你的PR,这个时候你做的改进原有项目就会拥有了。

Watch:这个也好理解就是观察,如果你 Watch 了某个项目,那么以后只要这个项目有任何更新,你都会第一时间收到关于这个项目的通知提醒。

Gist:有些时候你没有项目可以开源,只是单纯的想分享一些代码片段,那这个时候 Gist 就派上用场了!

创建github项目

在github整个界面的右上角的加号,选择【create new repository】创建一个新的github仓库,以下是一些创建仓库时的选项。

在这里插入图片描述

创建好之后你的仓库图如下:

在这里插入图片描述

虽然其中只有一个自动生成的README文件,但是它已经是一个完整的仓库了,可以正常使用包括clone等命令。

README文件可以理解为是这个项目的说明书,这个文件中的内容应该包括如何部署和调整运行整个项目,该文件使用markdown语法进行编写,和写博客一样,在正式的项目中,README文件非常重要,应该精心书写。

向github提交项目

SSH

为了防止随意提交造成的混乱,提交代码之前一定是需要某种授权的,而 GitHub 上一般都是基于 SSH 授权的。SSH是一种网络协议,用于计算机之间的加密登录。目前是每一台 Linux 电脑的标准配置。在安装了git之后,Windows系统也有SSH服务,而大多数 Git 服务器都会选择使用 SSH 公钥来进行授权,所以想要在 GitHub 提交代码的第一步就是要先添加 SSH key 配置。

SSHkey

在安装完git后应该会自动安装好SSH服务,可以在git bash(命令行)中输入ssh查看,如果没有显示下面的内容可以自己安装一下ssh服务。

在这里插入图片描述

输入命令ssh-keygen -t rsa指定rsa算法生成密钥,然后连续三个回车(不要进行输入),在Windows系统目录/c/用户/用户名/.ssh(隐藏文件)下面就会看到两个文件id_rsa 和id_rsa.pub ,而 id_rsa 是密钥,id_rsa.pub 就是公钥。

github上面添加ssh key

在github中,点击右上角头像的settings,在设置中选择【SSH and GPG keys】,选择【New SSH Key】添加一个新的SSH Key

在这里插入图片描述

然后把id_sra.pub(记事本打开)公钥中的内容给粘贴进去即可

在这里插入图片描述

在这一步可以不设置ssh的Title,github会根据公钥中的内容自动识别用户名并将其作为Title

在设置完ssh之后,使用ssh -T git@github.com 命令测试是否配置成功

在这里插入图片描述

PUSH & PULL

push直译过来就是「推」的意思,如果你本地代码有更新了,那么就需要把本地代码推到远程仓库,这样本地仓库跟远程仓库就可以保持同步了。

【示例】把本地代码推到远程仓库mian分支

git push origin mian

pull直译过来就是「拉」的意思,如果别人提交代码到远程仓库,这个时候你需要把远程仓库的最新代码拉下来,然后保证两端代码的同步。

【示例】把远程仓库mian分支中的代码拉到本地

git pull origin mian

一般我们在push之前都会先pull ,这样不容易冲突。

克隆和提交代码

添加 SSH key 成功之后,就可以实现克隆项目和代码的提交

克隆项目

我们之前在github上面创建了一个test项目,现在让我们用clone命令将其克隆到本地,让我们再创建一个空文件,不需要init(初始化),直接使用clone命令git clone https://github.com/dao-ca-ren/test.git

在这里插入图片描述

打开repository右上角的code就可以找到对应的仓库地址

在这里插入图片描述

克隆之后,原本的空文件夹就变成了一个git仓库,其中有我们远程仓库中的内容,此时的这个本地仓库就和远程仓库绑定好了,修改完本地的内容后进行commit之后,就可以直接使用push将修改内容推到远程仓库中。

绑定远程仓库

如果我们本地已经建立好一个仓库,上面的方法就不适合使用了,此时需要将本地仓库和远程仓库建立关联之后在进行push才行。

git remote add origin https://github.com/dao-ca-ren/test.git

在本地仓库中,运行上述命令绑定远程仓库,其地址为https://github.com/dao-ca-ren/test.git,origin为给远程仓库起的名字,因为一个复杂的项目可能会有多个远程仓库,这时候就需要我们使用名字进行区分。

查看当前项目有哪些远程仓库:

git remote -v

在这里插入图片描述

上述的fetch和push是两种不同的操作,后续为你详细介绍

现在我们再来看一遍push操作,其中的命令含义我们就都懂了

git push origin mian

把当前本地目录的改动,推到origin远程仓库的mian分支

fetch

在Git中,fetch 命令用于从远程仓库下载数据并将其合并到本地仓库中,但不会自动合并这些更改。它将远程分支的快照复制到你的本地仓库中,作为远程跟踪分支。这样你可以在之后选择性的将这些更改合并到你的工作分支中。

基本用法

1. Fetch所有远程仓库的更改
git fetch
2. Fetch特定远程仓库的所有更改
git fetch <remote_name>

其中 <remote_name> 是你想要从其获取更新的远程仓库的名称。例如,如果你的远程仓库名为 origin,则命令为:

git fetch origin
3. Fetch特定远程仓库的特定分支
git fetch <remote_name> <branch_name>

这会将远程分支的最新状态拉取到本地。例如,拉取 origin 远程仓库中的 main 分支:

git fetch origin main

查看远程分支

使用 fetch 后,你可以查看远程分支的状态:

git branch -r

合并远程分支到当前分支

如果你想将远程分支的更改合并到你的当前分支,可以使用以下命令:

git merge <remote_name>/<branch_name>

例如,将 origin/main 合并到当前分支:

git merge origin/main

注意事项

  • 在执行 fetch 命令之前,最好先确认你的工作目录是干净的,没有未提交的更改。
  • 如果你只是想同步远程仓库的最新状态而不立即合并更改,那么使用 fetch 而不是 pull 更为合适。
  • 使用 fetchmerge 可以让你更细粒度地控制合并流程,避免不必要的冲突。
  • fetch 不会改变你的工作树或当前 HEAD 的位置。

整个本地仓库加上远程仓库的命令和流程如下图所示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Postman导出excel文件

0 写在前面 在我们后端写接口的时候&#xff0c;前端页面还没有出来&#xff0c;我们就得先接口测试&#xff0c;在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

node解析Excel中的考试题并实现在线做题功能

1、背景 最近公司安排业务技能考试&#xff0c;下发excel文件的题库&#xff0c;在excel里查看并不是很方便&#xff0c;就想着像学习驾考题目一样&#xff0c;一边看一边做&#xff0c;做完之后可以查看正确答案。 2、开始分析需求 题目格式如下图 需求比较简单&#xff0c;…

JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现PSO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现PSO-Transformer-LSTM多变量回归预测&#xff0c;粒子群优化Transformer结合LST…

浅聊 Three.js 屏幕空间反射SSR-SSRShader

浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…

新文件覆盖旧文件还能复原吗?八大excel文档修复软件免费

新文件覆盖旧文件还能复原吗&#xff1f;文件操作失误&#xff0c;尤其是新文件意外覆盖旧文件的情况时有发生&#xff0c;面对文件被覆盖的情况&#xff0c;我们不仅需要冷静应对&#xff0c;更需要掌握一系列有效的恢复策略。本文将深入探讨八种免费方法&#xff0c;旨在帮助…

JavaWeb笔记_Response对象

一.Response对象 1.1 Response对象概述 a.专门负责给浏览器响应信息&#xff08;响应行&#xff0c;响应头&#xff0c;响应体&#xff09;的对象 b.我们主要使用的是跟HTTP协议相关的Response对象&#xff1a;HTTPServletResponse&#xff0c;继承了ServletResponse&#x…

谷粒商城-商品上架

1.sku在es中的存储模型分析(spring整和es) es中所有数据存在内存中,内存产品贵,能节省就节省,只保存有用的信息 两种保存方法:(空间换时间,时间换空间): 我们选空间换时间 ES中放这些东西: "mappings": { "properties": { "skuId"…

ClickHouse 入门(二)【基础SQL操作】

1、ClickHouse 1.1、SQL 操作 这里只介绍一些和我们之前 MySQL 不同的语法&#xff1b; 1.1.1、Update 和 Delete ClickHouse 提供了 Delete 和 Update 的能力&#xff0c;这类操作被称为 Mutation 查询&#xff08;可变查询&#xff09;&#xff0c;它可以看 做 Alter 的一…

国产化低功耗HDMI转VGA方案,大量出货产品,广泛应用在显示器以及广告机产品

芯片描述&#xff1a; 兼具高性能和低成本效益的优点&#xff0c;是一款可以将高清视频 HDMI1.4 数字信号转换成 VGA 模拟信号输出的芯片。不需要提供外部电源&#xff0c;ICNM7301 就可以在正常模式下使用&#xff1b;ICNM7301 广 泛适用于各种市场系统和显示应用体系&#x…

2024-07-18 Unity插件 Odin Inspector8 —— Type Specific Attributes

文章目录 1 说明2 特定类型特性2.1 AssetList2.2 AssetSelector2.3 ChildGameObjectsOnly2.4 ColorPalette2.5 DisplayAsString2.6 EnumPaging2.7 EnumToggleButtons2.8 FilePath2.9 FolderPath2.10 HideInInlineEditors2.11 HideInTables2.12 HideMonoScript2.13 HideReferenc…

【 FPGA 线下免费体验馆】高端 AMD- xilinx 16 nm UltraScale +系列

在复杂的FPGA 开发的过程中&#xff0c;需要能够满足高速、高精度、多通道等的复杂应用。而一个简单的 FPGA 开发板是不具备这些的&#xff0c;因此需要用更高端&#xff0c;大容量&#xff0c;高速IO的 FPGA 芯片与其他硬件组成一个完整的系统开发。这里就产生了高端 FPGA 开发…

拍视频麦克风什么牌子好,什么麦克风音质好,无线麦克风品牌推荐

​当我们想要记录生活中的精彩瞬间&#xff0c;或是在工作中展现专业的一面时&#xff0c;声音的质量显得尤为重要。想象一下&#xff0c;在一间教室中&#xff0c;老师使用无线领夹麦克风&#xff0c;让每一个知识点都能准确无误地传达给学生&#xff1b;在一场激烈的体育赛事…

基于springboot新生宿舍管理系统

系统背景 在当今高等教育日益普及的时代背景下&#xff0c;高校作为知识传播与创新的重要基地&#xff0c;其基础设施的智能化管理显得尤为重要。新生宿舍作为大学生活的起点&#xff0c;不仅是学生日常生活与学习的重要场所&#xff0c;也是培养学生独立生活能力和团队合作精神…

从安装Node到TypeScript到VsCode的配置教程

从安装Node到TypeScript到VsCode的配置教程 1.下载Node安装包&#xff0c; 链接 2.双击安装包&#xff0c;选择安装路径&#xff0c;如下&#xff1a; 3.一直点击下一步&#xff0c;直至安装结束即可&#xff1a; 这个时候&#xff0c;node会默认配置好环境变量&#xff0c;并且…

Kotlin泛型实化

内联函数 reified实现 1. 内联函数 内联函数中的代码会在编译的时候自动被替换到调用它的地方&#xff0c;这样的话也就不存在什么泛型擦除的问题了&#xff0c;因为代码在编译之后会直接使用实际的类型来替代内联函数中的泛型声明。 2. reified关键字 在Kotlin中&#xff0…

webrtc QOS方法十三(视频渲染平滑)

一、背景介绍 视频渲染时间的确定需要考虑三方面的因素&#xff1a;网络抖动、网络延时、音视频同步 网络抖动&#xff1a;视频帧在网络上传输&#xff0c;会受到网络抖动的影响&#xff0c;不能收到立刻播放&#xff0c;需要进行适当的平滑 网络延时&#xff1a;一些报文在…

Axure 教程 | 设置文本框背景透明

​在AXURE软件中&#xff0c;部件样式可以编辑&#xff0c;但有时却无法满足所有个性化原型的需求。例如文本框部件&#xff0c;可以设置是否隐藏边框&#xff0c;但即使隐藏边框之后&#xff0c;文本框还会有白色的背景。 当界面需要一个无背景色的输入框时&#xff0c;对于完…

h5点击电话号跳转手机拨号

需要使用到h5的 <a>标签 我们首先在<head>标签中添加代码 <meta name"format-detection" content"telephoneyes"/>然后再想要的位置添加代码 <a href"tel:10086"> 点击拨打&#xff1a;10086 </a> 这样功能就实现…

QtC++ 设计模式(五)——状态模式

状态模式 序言理解源码 序言 设计模式只是一个抽象的设计模式方法&#xff0c;并不是一个固定使用的搭配&#xff0c;就算是普通switch语句&#xff0c;Map&#xff0c;乃至状态机都是状态模式的其中一种实现方法 状态模式看起来好像和策略模式差不多&#xff0c;主要是其的侧…

FastAPI -- 第三弹(自定义响应、中间件、代理、WebSockets)

路径操作的高级配置 OpenAPI 的 operationId from fastapi import FastAPIapp FastAPI()# 通过 operation_id 参数设置 app.get("/items/", operation_id"some_specific_id_you_define") async def read_items():return [{"item_id": "F…