GitHub修炼法则:第一次提交代码教学(Liunx系统)

前言

github是广大程序员们必须要掌握的一个技能,万事开头难,如果成功提交了第一次代码,那么后来就会简单很多。网上的相关资料往往都不是从第一次开始,导致很多新手们会在过程中遇到很多权限认证相关的问题,进而被卡住。为了解决这些问题,我整理了github第一次提交的教程,希望可以帮助大家掌握github的使用。
需要的环境:
VS code编辑环境。
WMware虚拟机与ubuntu系统。

这里我通过将我们本地写的一个项目ChatServer上传到github仓库来带领大家学习github的使用。

配置环境

1、安装git工具

对于一个新的ubuntu环境,先需要安装git工具,运行下面的指令:

hyl@hylPC:~/Desktop/Chat$ sudo apt install git
[sudo] password for hyl: 

2、创建仓库

在github网站上创建一个仓库,这个操作过于基础,不做过多讲解了。
在这里插入图片描述

3、克隆仓库

首先需要仓库的地址,如下图所示进入到刚刚创建的仓库中,复制图中的网址。在这里插入图片描述接下来切换到我们项目的目录下,我这里是:~/Desktop/Chat,输入下面的指令进行克隆仓库:

hyl@hylPC:~/Desktop/Chat$ git clone https://github.com/MrDavid615/ChatServer.git

在这里插入图片描述
如上图所示,克隆后本地目录下会出现一个ChatServer文件夹,这取决于你的仓库的名字,这里文件夹就是一个github的仓库,在该文件夹下会有一个隐藏文件.git。在其他的文件夹下运行git类指令是无法运行的(git clone除外),类似于git pullgit push等指令都要在git仓库对应的文件夹下运行,因为这些仓库里面有.git这个隐藏文件。
这样我们就成功在本地克隆了一个github仓库。

代码提交

1、在ChatServer内进行开发

现在我们的代码都是在本地电脑上,不在仓库中,因此我们需要把本地的文件移动到ChatServer文件夹中。假设我们是在ChatServer目录下进行的开发。大家可以直接使用光标在VS Code左侧的目录树下操作文件,我这里用命令行的方式都是一样的。

hyl@hylPC:~/Desktop/Chat$ mv bin/ ChatServer/
hyl@hylPC:~/Desktop/Chat$ mv build ChatServer
hyl@hylPC:~/Desktop/Chat$ mv include/ ChatServer/
hyl@hylPC:~/Desktop/Chat$ mv src/ ChatServer/
hyl@hylPC:~/Desktop/Chat$ mv thirdparty/ ChatServer/
hyl@hylPC:~/Desktop/Chat$ mv test/ ChatServer/
hyl@hylPC:~/Desktop/Chat$ mv CMakeLists.txt  ChatServer/
hyl@hylPC:~/Desktop/Chat$ ls
ChatServer

这个操作实际上就是对我们仓库内的代码进行了一个修改(可以认为这些代码都是在ChatServer下编写的),之后我们继续开发都在ChatServer文件夹下,就不需要移动文件夹了。
执行完上面的操作后,我们本地的仓库与远程的仓库就会出现差异。

2、跟踪修改

我们切换到ChatServer下,输入git status指令与git add .指令(上面讲过了,除git clone外的其他指令要在在git仓库下才能运行)

hyl@hylPC:~/Desktop/Chat/ChatServer$ git status
On branch main
Your branch is up to date with 'origin/main'.Untracked files:(use "git add <file>..." to include in what will be committed)CMakeLists.txtbuild/include/src/test/thirdparty/nothing added to commit but untracked files present (use "git add" to track)
hyl@hylPC:~/Desktop/Chat/ChatServer$ git add .
# git add .指令的输出省略

这里显示了我们当前的本地仓库与远程仓库所有的文件上的差异,因为我们刚刚在本地修改了ChatServer的内容(增加了一些文件),远程没有同步。因此我们需要使用git add .指令将我们的修改增加到暂存区。
这里git add后面跟的是一个路径,后面跟一个“”表示将当前目录内的所有修改都加入暂存区。通过后面指定具体目录,我们可以选择需要加入暂存区的文件的范围。比如我输入git add ./build/就表示将当前目录下的build子目录下的文件加入暂存区。

3、提交修改

接下来将代码提交,输入git commit -m "your descrip" ,引号内为这次提交的文字描述,没有格式要求,随便写一些文字来描述这次提交的改动。对与第一次提交的同学,走到这一步可能出现问题。

hyl@hylPC:~/Desktop/Chat/ChatServer$ git commit -m "ChatServer 1.0 附带服务器端所有源代码"
Author identity unknown*** Please tell me who you are.Rungit config --global user.email "you@example.com"git config --global user.name "Your Name"to set your account's default identity.
Omit --global to set the identity only in this repository.fatal: unable to auto-detect email address (got 'hyl@hylPC.(none)')

上面的问题主要是没有配置当前的用户与邮箱,因此需要进行配置,输入git config ...注意这里的邮箱和用户名其实只是一个标识符,没有实际意义

hyl@hylPC:~/Desktop/Chat/ChatServer$ git config user.email "hyl@hyl.com"
hyl@hylPC:~/Desktop/Chat/ChatServer$ git config user.name "hyl"

重新提交:

hyl@hylPC:~/Desktop/Chat/ChatServer$ git commit -m "ChatServer 1.0 附带服务器端所有源代码"
[main 4e741ec] ChatServer 1.0 附带服务器端所有源代码61 files changed, 47062 insertions(+)create mode 100644 CMakeLists.txt# 。。。省略create mode 100644 thirdparty/json.hpp

4、推送代码

走到这一步后,我们远程的仓库还没有实际的修改,想要改变远程仓库,我们需要输入最后一个指令git push。对于第一次操作的朋友,这里一定需要进行身份认证,这里有两种方法:TokenSSH,推荐使用SSH,如何配置我在下面有详细的讲述。

hyl@hylPC:~/Desktop/Chat/ChatServer$ git push
Username for 'https://github.com': 

验证身份后再次运行git push即可。

解决身份验证问题

SSH

1、回到git hub网页,点击右上角头像,点击Settings,进入下图页面
在这里插入图片描述
2、点击后进入这里,需要输入一个密钥(这里图片标准不准确,应该是填入我们复制的公钥,懒得改了)
在这里插入图片描述
3、我们需要生成这个密钥。终端输入如下指令,这里的邮箱是刚刚我们设置的那个虚假的邮箱,之后疯狂回车,会生成一个密钥文件存储在路径/home/hyl/.ssh/id_rsa

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"# 下面是指令的输出,有省略,不一样不要慌
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hyl/.ssh/id_rsa): 

4、前往路径下,可以看到一个.pub后缀的文件,里面的文本对应公钥:

hyl@hylPC:~/Desktop/Chat/ChatServer$ cd /home/hyl/.ssh/
hyl@hylPC:~/.ssh$ ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts  known_hosts.old

5、使用cat查看内容并复制.pub文件的内容(公钥很长,这里有省略)

hyl@hylPC:~/.ssh$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2....ZrNAK+jiEqoQ== hyl@hyl.com

6、把复制的文本填入(这里图片标准不准确,应该是填入我们复制的公钥,懒得改了)
在这里插入图片描述
7、需要切换到ssh推送模式,由于之前克隆时用的是HTTPS方式来获取仓库网址,这里使用SSH需要修改一下仓库的网址,在终端输入:

git remote set-url origin git@github.com:MrDavid615/ChatServer.git

这里的网址用下图下图的方式获取:
在这里插入图片描述
8、检测ssh配置状态,输入指令后狂按回车,最后会显示出最下面一行文字证明配置成功

hyl@hylPC:~/.ssh$ ssh -T git@github.com
# 下面是输出
The authenticity of host 'github.com (20.205.243.166)' can't be established.
ED25519 key fingerprint is SHA256....4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes(这里输入yes)
Warning: Permanently added 'github.com,20.205.243.166' (ED25519) to the list of known hosts.
Hi hyl! You've successfully authenticated, but GitHub does not provide shell access

9、可以推送代码了!

Token

使用令牌的方式进行验证很不稳定,而且经常遇到令牌过期的问题,推荐大家使用SSH方法,这里就先不讲Token了,有时间再更新
(未完待续)

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

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

相关文章

沥青路面裂缝的目标检测与图像分类任务

文章题目是《A grid‐based classification and box‐based detection fusion model for asphalt pavement crack》 于2023年发表在《Computer‐Aided Civil and Infrastructure Engineering》 论文采用了一种基于网格分类和基于框的检测&#xff08;GCBD&#xff09;&#xff…

【Flask】ORM模型以及数据库迁移的两种方法(flask-migrate、Alembic)

ORM模型 在Flask中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;模型是指使用面向对象的方式来操作数据库的编程技术。它允许开发者使用Python类和对象来操作数据库&#xff0c;而不需要直接编写SQL语句。 核心概念 1. ORM模型…

C/C++滑动窗口算法深度解析与实战指南

C/C滑动窗口算法深度解析与实战指南 引言 滑动窗口算法是解决数组/字符串连续子序列问题的利器&#xff0c;通过动态调整窗口边界&#xff0c;将暴力解法的O(n)时间复杂度优化至O(n)。本文将系统讲解滑动窗口的核心原理、C/C实现技巧及经典应用场景&#xff0c;助您掌握这一高…

Vuex使用指南:状态管理

一、什么是状态管理&#xff1f;为什么需要 Vuex&#xff1f; 1. 状态管理的基本概念 在 Vue 应用中&#xff0c;状态指的是应用中的数据。例如&#xff1a; 用户登录状态购物车中的商品文章列表的分页信息 状态管理就是对这些数据的创建、读取、更新和删除进行有效管理。 …

【信息系统项目管理师-论文真题】2007下半年论文详解(包括解题思路和写作要点)

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 试题1:大型项目的计划与监控1、写作要点2、解题思路大型信息系统项目的组织制订大型信息系统项目进度计划的方法试题2:组织级项目管理的绩效考核1、写作要点2、解题思路在项目考核过程中会遇到哪些问题项目的…

项目管理学习-CSPM(1)

01引言 最近在学习CSPM的课程&#xff0c;有部分的内容自己还是受益匪浅的&#xff0c;建议有需要提升项目管理能力的同学可以以考促学的方式进行学习&#xff0c;下面整理了一部分内容和大家分享和学习。CSPM全称 China Standards Project Management&#xff0c;中文名项目管…

介绍分治、动态规划、回溯分别是什么?有什么联系和区别?给出对象的场景和java代码?

一、分治算法&#xff08;Divide and Conquer&#xff09; 概念&#xff1a; 分治算法是将一个复杂问题分成若干个子问题&#xff0c;每个子问题结构与原问题类似&#xff0c;然后递归地解决这些子问题&#xff0c;最后将子问题的结果合并得到原问题的解。 特点&#xff1a;…

解锁DeepSeek模型微调:从小白到高手的进阶之路

目录 一、DeepSeek 模型初相识二、探秘微调原理2.1 迁移学习基础2.2 微调的参数更新机制 三、数据准备3.1 数据收集3.2 数据标注3.3 数据预处理 四、模型选择与加载4.1 选择合适的预训练模型4.2 加载模型 五、微调训练实战5.1 确定微调策略5.2 设置训练参数5.3 训练过程 六、模…

端到端观测分析:从前端负载均衡到后端服务

前言 我们在做系统运维保障的时候&#xff0c;关注从前端负载均衡到后端服务的流量情况是很有必要的&#xff0c;可以了解每个后端服务实例接收的流量大小&#xff0c;这有助于确定资源分配是否合理&#xff0c;能够帮助找出后端服务中的性能瓶颈。同时&#xff0c;当系统出现…

Ubuntu下OCC7.9+Qt5 快速搭建3D可视化框架

Ubuntu下OCC7.9+Qt5搭建简易的项目框架 近两年国产CAD替代如日中天,而几何内核作为CAD软件的核心组件之一,当前有且仅有唯一开源的几何内核库即OCCT;这里为各位自立于投入CAD开发或正在学习OCC库的小伙伴们奉献上一个快速搭建QT+OCC的项目框架; 本文介绍了Qt5+Occ 显示几何…

C++类与对象—下:夯实面向对象编程的阶梯

9. 赋值运算符重载 9.1 运算符重载 在 C 里&#xff0c;运算符重载能够让自定义类型的对象像内置类型那样使用运算符&#xff0c;这极大地提升了代码的可读性与可维护性。运算符重载本质上是一种特殊的函数&#xff0c;其函数名是 operator 加上要重载的运算符。 下面是运算…

【深度学习-Day 6】掌握 NumPy:ndarray 创建、索引、运算与性能优化指南

Langchain系列文章目录 01-玩转LangChain&#xff1a;从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块&#xff1a;四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain&#xff1a;从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

工程师 - 汽车分类

欧洲和中国按字母对汽车分类&#xff1a; **轴距**&#xff1a;简单来说&#xff0c;就是前轮中心点到后轮中心点之间的距离&#xff0c;也就是前轮轴和后轮轴之间的长度。根据轴距的大小&#xff0c;国际上通常把轿车分为以下几类&#xff08;德国大众汽车习惯用A\B\C\D分类&a…

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

随着低代码平台和大语言模型工具的不断发展,将企业数据与智能交互能力融合,成为提高办公效率与自动化水平的关键一步。明道云作为一款成熟的低代码平台,Dify 则是一个支持自定义工作流的开源 LLM 应用框架。两者结合,可以实现灵活、高效的智能化业务处理。 本文将详解明道…

鼠标悬浮特效:常见6种背景类悬浮特效

鼠标悬浮特效&#xff1a;常见6种背景类悬浮特效 前言背景闪现效果预览代码展示 元素阴影效果预览代码展示 元素悬浮阴影效果预览代码展示 元素上浮阴影效果预览代码展示 元素边框阴影效果预览代码展示 元素卷角效果预览代码展示 结语 前言 在之前的文章中&#xff0c;我们介绍…

[人机交互]理解与概念化交互

零.本章重点&#xff08;理解和分析用户问题&#xff09; – 解释“问题空间”的概念和含义 – 解释如何概念化交互 – 描述什么是概念模型 – 讨论将界面隐喻作为概念模型的利弊 – 讨论界面具体化和抽象化各自的优缺点 – 概述概念设计和实际设计的关系 一.理解问题空间 简单…

9.城市基础设施更新工程

9.1 道路改造施工 9.1.1 道路改造施工内容 沥青、水泥混凝土、砌块路面、人行步道、绿化照明、附属设施、交通标志、沥青路面材料的再生利用 9.1.2 道路改造施工技术 1.沥青路面病害及微表处理 1.病害处理 裂缝处理 10mm以内专业灌缝材料或热沥青灌缝、潮湿时乳化沥青灌封…

Milvus(11):动态字段、可归零和默认值

1 动态字段 Collections 的 Schema 中定义的所有字段都必须包含在要插入的实体中。如果希望某些字段是可选的&#xff0c;可以考虑启用动态字段。 1.1 概述 在 Milvus 中&#xff0c;可以通过设置 Collections 中每个字段的名称和数据类型来创建 Collections Schema。向 Schem…

LeetCode41☞缺失的第一个正数

关联LeetCode题号41 本题特点 数组&#xff0c;哈希表 本题思路 找缺失的最小正数&#xff0c;看举例说明缺失的正数&#xff0c;一种情况是连续的最小的正数&#xff0c;一种是缺失连续但不是最小的正数验证数组内数组是否连续&#xff0c;可以通过 nums[i]1 是否存nums组…

补题( Convolution, 二维卷积求输出矩阵元素和最大值)

来源&#xff1a;https://codeforces.com/gym/105231/problem/H 题目描述&#xff1a; 一、题目分析 本题涉及深度学习中的二维卷积操作。给定一个nm的二维输入矩阵I和一个kl的核矩阵K &#xff0c;通过特定公式计算得到(n - k 1)(m - l 1)的输出矩阵O &#xff0c;要求在…