Git入门与使用 (三) 使用GitHub进行代码托管的相关操作

2023-11-08


一、前言

  在上一篇文章中已经对Git相关命令的介绍与使用进行了讲解,下面正式进入到使用GitHub进行代码托管的相关操作的讲解。



二、使用GitHub进行代码托管的相关操作

1、推送本地仓库内容至远程仓库

1.1、登录GitHub,点击右上角的"+",选择New repository,创建一个新的仓库

1.2、进入到新建仓库页面,填写仓库的相关信息,点击Create repository按钮,创建远程仓库

1.3、创建好远程仓库之后,会进入到GitHub的操作提示页面,同时页面也会给出远程库的地址(有Https和SSH两种类型的地址)

1.4、在我们本地创建一个名为git-test的文件夹,并初始化使其成为Git本地仓库 (注意:本地仓库名称可以与远程仓库名称不一致,这里只是为了好区分,所以才命名一致)

1.5、新建一个data.txt文件,并在文件中添加一些内容,然后提交至本地仓库

1.6、在本地创建远程仓库地址的别名,由于远程仓库的地址太长,写起来太麻烦,所以我们可以为远程仓库地址设置一个别名,之后就可以直接使用别名来替代远程仓库地址

//查看地址映射
git remote -v

//添加地址别名映射
git remote add 别名 远程仓库地址

1.6.1、点击复制按钮,复制远程仓库地址

1.6.2、添加远程仓库地址别名映射

可以看到有两个相同的远程仓库地址别名映射,只是括号后面的内容不一致

  • origin https://github.com/lemon-wubin/git-test.git (fetch):表示用来拉取远程仓库的内容到本地仓库时使用的地址

  • origin https://github.com/lemon-wubin/git-test.git (push):表示用来推送本地仓库内容到远程仓库时使用的地址

1.7、推送本地仓库内容至远程仓库

git push 远程仓库地址别名 本地仓库分支名

1.7.1、执行推送命令后,需要输入GitHub的用户名和密码进行验证,才能推送至远程仓库

1.7.2、推送成功,并查看GitHub远程仓库


在这里插入图片描述

2、克隆远程仓库内容至本地仓库

2.1、在我们本地另外创建一个名为git-clone的文件夹,并进入到git-clone文件夹下

2.2、复制远程仓库地址

2.3、克隆远程仓库内容至本地

git clone 远程仓库地址


可以看到,我们把远程仓库中的内容克隆到了我们本地,同时克隆操作也帮我们初始化了本地仓库添加了远程仓库地址别名映射

3、邀请他人加入项目团队

3.1、我们修改本地git-clone/git-test仓库下的data.txt文件,在data.txt文件中添加一行新的内容,并提交到本地仓库


3.2、我们使用另外一个名为lemon-jackGitHub账号进行远程提交

由于在演示推送本地仓库内容至远程仓库时,我们使用了名为lemon-wubinGitHub账号登录并成功推送至远程仓库,这时Windows10操作系统会自动帮我们记住GitHub的用户名和密码,下次再推送时就会自动登录,而不需要我们再次输入GitHub的用户名和密码,为了演示用另外一个名为lemon-jackGitHub账号进行远程提交操作,我们需要删除Windows10操作系统凭据管理器中的GitHub的账号信息,重新使用其他的GitHub账号来进行登录

3.2.1、鼠标右键此电脑或者我的电脑,选择属性(R)进入到Windows10系统页面,并点击左上角的控制面板主页,进入到控制面板页面

3.2.2、进入到控制面板页面之后,点击右上角的类别选项,将类别切换成小图标

3.2.3、以小图标的方式进行查看之后,找到凭据管理器并点击,进入到凭据管理器页面

3.2.4、选择Windows 凭据,找到GitHub账号信息凭据,并点击删除即可

3.2.5、使用另外一个名为lemon-jackGitHub账号进行远程提交

3.2.6、提示名为lemon-jackGitHub账号,不能访问我们的远程仓库地址

这是因为其他人在未被加入到项目团队之前,是无法推送本地仓库内容至远程仓库,因为远程仓库是仓库拥有者创建的,所以其他人没有相关的权限,但仓库拥有者可以邀请其他人加入到项目团队,这样其他人就拥有了推送操作的权限。接下来我们来操作如何邀请他人加入项目团队。

3.3、在我们的git-test远程仓库页面中,点击Settings选项

3.4、点击Collaborators选项,输入被邀请人的GitHub账号的用户名,最后点击Add collaborator按钮


3.5、点击Copy invite link按钮,复制邀请链接,然后发送给被邀请人 (其实在我们上一步点击Add collaborator按钮时,GitHub会自动把邀请链接已邮箱的形式发送给被邀请人)

3.6、被邀请人登录到自己的GitHub账号后,访问邀请人 (即:远程仓库拥有者) 发送过来的邀请链接,然后点击Accept invitation按钮,接收邀请即可


3.7、我们再次使用名为lemon-jackGitHub账号,进行推送操作,推送成功



4、拉取远程仓库修改的内容

//pull(拉取)操作其实是fetch(抓取)和merge(合并)两个操作的合并,先fetch再merge
git pull 远程仓库地址别名 远程仓库分支名

等价于

git fetch 远程仓库别名 远程仓库分支名
git merge 远程仓库别名/远程仓库分支名 (需要先切换到被合并的分支)

4.1、上一步我们已经把修改的内容推送到了远程仓库,接下来我们来拉取远程仓库修改的内容,此时我们所在位置是git-clone/git-test仓库下,我们先进入到另外一个git-test仓库下


4.2、拉取远程仓库修改的内容


5、解决协同开发时产生的冲突

接下来我们就来模拟在协同开发时,如何解决产生的冲突

5.1、当前我们处于git-test仓库下,我们修改仓库下的data.txt文件,并提交到本地仓库

5.2、使用名为lemon-wubinGitHub账号,进行推送操作 (记得删除凭据管理器中的GitHub的账号信息),推送成功

5.3、此时我们所在位置是git-test仓库下,我们先进入到git-clone/git-test仓库下,修改仓库下的data.txt文件,并提交到本地仓库

5.3、使用名为lemon-jackGitHub账号,进行推送操作 (记得删除凭据管理器中的GitHub的账号信息)

可以看到一条提示信息error: failed to push some refs to 'https://github.com/lemon-wubin/git-test.git',我们推送至远程仓库失败了,这是因为在lemon-jack用户之前,lemon-wubin用户已经把他的修改提交到了远程仓库中,而lemon-jack用户所进行的一系类操作,并不是基于GitHub远程仓库的最新版本所做修改的,所以GitHub禁止我们推送,所以我们需要先拉取远程仓库最新版本的内容到本地,然后再做相应的修改,最后推送至远程仓库。

5.4、拉取远程仓库最新版本的内容到本地

从上图可以看到一条提示信息Automatic merge failed; fix conflicts and then commit the result.,系统告诉我们拉取远程仓库最新版本的内容失败了,原因是lemon-jack用户与lemon-wubin用户对data.txt文件的同一处地方都做了修改,Git拿不定主意。

5.4、手动解决冲突,使用Vim编辑器打开产生冲突的data.txt文件,显示的内容如下所示:
在这里插入图片描述
<<<<<<< HEAD=======之间的内容是我们当前本地仓库的内容,而=======>>>>>>> 60978c99fdfbd50efe0de22f351ea1c01c71c519之间的内容是远程仓库的内容,我们将data.txt文件的内容修改成我们想要的内容,同时删除<<<<<<< HEAD=======>>>>>>> 60978c99fdfbd50efe0de22f351ea1c01c71c519,修改完成之后的内容为:

5.5、重新将data.txt文件提交到暂存区,然后提交到本地仓库中

这样,冲突就被我们给解决了,不过需要注意的是,以往我们在进行提交操作时,都习惯在提交命令后带上文件名,即:git commit -m "提交信息" filename,但是在进行冲突的提交时,是不能够带上文件名的,即:git commit -m "提交信息",不然会提示:fatal:cannot do a partial commit during a merge.的错误信息,这点需要特别注意。

5.5、最后再次使用名为lemon-jackGitHub账号,进行推送操作 (记得删除凭据管理器中的GitHub的账号信息),推送成功



6、跨团队协作开发

在实际的开发项目中,有些项目功能公司团队内部人员无法实现,但是公司外的团队成员能够实现这一功能,这时我们就需要跨团队协作开发,接下来我们就来模拟跨团队协作开发

6.1、复制远程项目地址,发送给公司外名为lemon-john的团队成员


6.2、lemon-john成员登录到GitHub,并访问该远程项目地址,然后点击Fork按钮(是以lemon-john成员的身份点击Fork按钮),拷贝一份到自己的GitHub远程仓库下

6.3、进入到Forking中,可以看到此时的仓库拥有者为lemon-john,同时指出了fork 来源自lemon-wubin/git-test

6.4、复制lemon-john成员fork下来的远程仓库地址

6.5、在本地新建一个git-team的文件夹,并克隆lemon-john成员fork下来的远程仓库内容到git-team文件夹下

6.6、进入到git-team/git-test目录下,修改data.txt文件,并提交到本地仓库

6.7、使用名为lemon-johnGitHub账号,推送到lemon-john用户的GitHub远程仓库中

6.8、点击Pull requests选项,然后再点击New pull request按钮,发起Pull requests请求

6.9、点击Create pull request按钮,同时可以看到红色方框中,文件内容的改动情况

6.10、发起Pull requests请求通知,输入请求通知的标题和正文内容,最后点击Create pull request按钮

6.11、使用名为lemon-wubin的公司团队内部人员登录到GitHub,点击Pull requests选项,查看lemon-john成员发起的Pull requests请求通知

6.12、同时lemon-wubin成员也可以回复lemon-john成员发送过来的Pull requests请求通知消息

6.14、审核lemon-john成员提交和修改的内容

点击Commits选项,查看提交了哪些内容

点击Files changed选项,查看具体修改的内容

6.15、审核通过之后,点击Conversation选项,然后点击Merge pull request按钮,进行合并操作

6.16、添加合并操作日志,点击Confirm merge按钮进行合并

6.17、此时我们所在位置是git-team/git-test仓库下,我们进入到git-test仓库下,拉取远程仓库合并后的最新内容


7、GitHub设置SSH Key,实现SSH免密登录

在使用远程仓库的HTTPS地址进行推送操作时,由于Windows10系统凭据管理器会自动帮我们记录GitHub的账号信息,所以每次在进行远程推送操作时,我们不需要输入GitHub账号的用户名和密码 (首次推送时,我们需要输入GitHub账号的用户名和密码),但是其他系统有可能没有凭据管理器,所以每次我们使用远程仓库的HTTPS地址进行推送操作时,都需要输入GitHub账号的用户名和密码,但是我们可以为远程仓库的SSH地址设置SSH Key,实现免密登录,接下来我们就来为GitHub设置SSH Key,实现SSH免密登录

7.1、什么是密钥

    密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥又分为对称密钥与非对称密钥,对称密钥加密又称私钥加密或会话密钥加密算法,非对称密钥加密系统又称公钥密钥加密。

7.2、设置SSH Key

7.2.1、首先进入到用户的家目录 (即:~) 下,并删除.ssh/目录

7.2.2、使用如下命令生成SSH Key,在生成SSH Key的过程中,需要我们确认相关信息,直接一路按下回车键即可

ssh-keygen -t rsa -C "GitHub邮箱地址"

7.2.3、进入到.ssh/目录下,查看生成的id_rsa.pub文件 (公钥) 和 id_rsa文件 (私钥)

7.2.3、查看生成的id_rsa.pub文件 (公钥)内容,并复制id_rsa.pub文件中的内容,注意:复制id_rsa.pub文件中的内容时,内容开头或者末尾不要包含多余的空格

7.2.4、登录到GitHub上,点击右上角的头像,并点击Settings选项,进入到设置页面

7.2.5、进入到设置页面之后,点击SSH and GPG keys选项,然后点击New SSH key按钮,添加SSH key

7.2.6、填写标题,并把之前复制id_rsa.pub文件中的内容粘贴到Key文本框中,然后点击Add SSH key按钮

7.2.7、输入GitHub账号的密码,并点击Confirm password按钮

7.2.8、添加SSH key成功

7.2.9、测试SSH key是否配置成功,我们在Git终端输入ssh -T git@github.com命令,这时它会问我们是否确定要继续连接吗,这是我们输入yes,表示确定继续连接

当看到有Hi lemon-wubin! You've successfully authenticated, but GitHub does not provide shell access.的提示信息时,则表示GitHub设置SSH Key成功。如果配置失败,请使用ssh -vT git@github.com命令查看具体出错信息,然后排查问题。



Git入门与使用系列文章列表:

Git入门与使用 (一) Git介绍与安装
Git入门与使用 (二) Git相关命令的介绍与使用
Git入门与使用 (三) 使用GitHub进行代码托管的相关操作
Git入门与使用 (四) IDEA集成Git,并通过图形化界面进行Git相关操作
Git入门与使用 (五) GitLab介绍与安装




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git入门与使用 (三) 使用GitHub进行代码托管的相关操作 的相关文章

  • 组合、子集问题汇总

    子集的问题的思路也分两个方向 一种是解空间树是关于每个数选还是不选 结点取值范围就是true or false 解向量的长度是固定的 即candidates的个数 而且只有完全解才是问题的解 解向量不是直接的答案 而是标志每个candida
  • 【Matlab学习笔记】【函数学习】size参数

    size A 函数是用来求矩阵的大小的 你必须首先弄清楚A到底是什么 大小是多少 比如说一个A是一个3 4的二维矩阵 1 size A 直接显示出A大小 输出 ans 3 4 2 s size A 返回一个行向量s s的第一个元素是矩阵的行
  • mis服务器系统,MIS系统中服务器"推"技术的实现

    摘要 PUSH技术作为一项先进的信息传播技术 自1996年诞生以来 基于Web 的PUSH技术迅速发展 在Internet上得到了迅速而广泛的应用 本文从企业 管理系统的开发与应用角度出发 提出了基于MIS系统中实现和运用PUSH技术 的三
  • 嘉立创免费打板方法

    下载嘉立创下单助手软件 打开软件 在左侧领取下单优惠券 填写好下打样参数后 在优惠券中选择使用优惠券 即可免费打样 10CM 10CM以内 一个月限领2次优惠券 使用优惠券条件 当客户上个月的消费低于20元 甚至是无消费 我们也为完全用嘉立
  • halcon颜色识别

    halcon颜色识别 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 使用灰度平均值 循环读图进行处理 HSV模型区分颜色 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 dev cl
  • 使用loadrunner12选择谷歌录制,出现一直在加载的状态,进不去

    选择了浏览器和URL 点击录制 弹出浏览器 一直在加载 而且进入其他网址也进不去了 需要重新打开浏览器才可以 我本来以为是项目的问题 又打开了loadrunner自带的订票系统 发现在谷歌浏览器也是一样的 但是在ie浏览器却都可以正常打开
  • Java超过long型范围时使用的BigInteger和BigDecimal

    文章目录 前言 一 BigInteger 二 BigDecimal 前言 Java中当一个数的超过long型范围 能够表示64位的整数 时可以使用BigInteger和BigDecimal类型 一 BigInteger 推荐使用BigInt
  • 地震数据剖面图-matlab

    这里主要有四个参数需要设置 wigb m地震数据画图函数下载地址 a seismic data 地震数据 scale multiple data by scale 扫描频率 1 3 范围内任选一个数字 x x axis 所有道的位置信息 z
  • Java集合相关的常用工具类简介说明

    转自 Java集合相关的常用工具类简介说明 下文笔者将讲述java集合类中常用的工具类简介说明 如下所示 Java中的集合类既可以当做放其他数据的容器 又可以当做常见的数据结构使用 Java中提供了很多好用的工具类来操作这些集合类 java
  • 贪心 算法

    本文目录 1 部分背包问题 2 乘船问题 3 区间调度问题 4 区间覆盖问题 5 区间选点问题 6 小船过河 往返问题 7 硬币支付问题 8 字典序最小问题 9 最优装载问题 1 部分背包问题 问题描述 有n个物体 第i个物体的重量为wi
  • 文件exer1的访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,下列哪个命令是对的?

    文件exer1的访问权限为rw r r 现要增加所有用户的执行权限和同组用户的写权限 下列哪个命令是对的 正确答案 A 你的答案 C 错误 chmod a x g w exer1
  • 微信小程序实现瀑布流展示

    在现代互联网时代 瀑布流展示方式越来越受到人们的青睐 其可以将海量的图片 商品等展示在界面上 不同大小的内容通过某种规律美观 有序地布局在网页或应用程序上 极大地提升了内容的呈现方式和用户体验 微信小程序在展示图片和商品等方面也可以采用瀑布
  • Java将Word转换成PDF

    最近项目需要做在线预览文档功能 要求对word文档后台转为pdf 遇到了很多问题 因此记录一下 网上有很多将Word转换成PDF的方式 这里我试了几种比较简单的方式 POI aspose spire和documents4j 1 POI PO
  • Mac OS : 源码安装nginx (不需homebrew)

    下载 nginx http nginx org download nginx 1 19 10 tar gz 解压到 usr local 下载 pcre https ftp pcre org pub pcre pcre 8 44 tar gz
  • 数据属性的类型

    数据属性的类型 原文 https blog csdn net qq 33457248 article details 79594782 数据集由数据对象组成 一个数据对象代表一个实体 数据对象又称样本 实例 数据点或对象 属性 attrib
  • 数据结构——链表练习题

    题目一 思路 双指针 当listA和listB其中一个位空时 两个列表就不存在相交 返回NULL 当listA和listB都不为空链表时 指针phead1和phead2同时分别遍历listA和listB 遍历完后 再去分别遍历listB和l
  • c++运算符优先级归纳

    C 一共有 18个优先级 运算中按优先级进行性计算 当优先级相同时 根据结合性规则来决定 结合性 1 从左到右 L R 操作数和操作符结合的顺序大部分是从左到右结合性的 例如 单独的算术运算符 2 从右到左 R L 最典型的是赋值运算符 当
  • lecture 8:OLS回归模型

    先学习这个资料 OLS自编算法 不调用函数 重要的英文参考资料 Using Python for Introductory Econometrics kevinsheppard讲授Python做计量 相关分析 1 相关系数的计算公式 r x

随机推荐

  • Java核心技术 卷Ι 1~2)Java 的基本程序设计结构、类和对象

    文章目录 一 Java 的基本程序设计结构 1 强制类型转换 2 检测字符串是否相等 二 类和对象 一 Java 的基本程序设计结构 1 强制类型转换 double x 9 99987 int i int x System out prin
  • 跟着代码随想录练算法——二叉树(JS)(下)

    跟着代码随想录练算法 二叉树 106 从中序与后序遍历序列构造二叉树 https leetcode cn problems construct binary tree from inorder and postorder traversal
  • HttpClient进行timeout设置及存活机制设置

    package com example demo config import lombok Data import org springframework boot context properties ConfigurationPrope
  • docker学习记录--使用Xshell连接docker上的Centos镜像

    1 下载docker https download docker com win stable Docker 20Desktop 20Installer exe 2 安装选择默认 3 配置以下国内镜像 registry mirrors ht
  • POJ 2456 疯牛(二分+贪心)

    疯牛 时间限制 1000 ms 内存限制 65535 KB 难度 4 描述 农夫 John 建造了一座很长的畜栏 它包括N 2 lt N lt 100 000 个隔间 这些小隔间依次编号为x1 xN 0 lt xi lt 1 000 000
  • 过拟合产生的原因和解决方案

    最近在研究室内定位的问题 总是过拟合 之前研究问题太过草率 这次计划将问题彻底的研究明白 过拟合 简单来说就是在训练集表现好 在测试集 验证集 表现差 从表现来看可以理解成模型复杂也好 还是你的数据有问题也好 总之最后模型学习到了你现在数据
  • vue 数组按时间排序

  • 一文理解Kafka如何保证消息顺序性

    要想实现消息有序 需要从Producer和Consumer两方面来考虑 如果对Kafka不了解的话 可以先看这篇博客 一文快速了解Kafka 针对消息有序的业务需求 还分为全局有序和局部有序 全局有序 一个Topic下的所有消息都需要按照生
  • 用spss做mk检验_SPSS中对问卷数据进行探索因子分析的详细操作与结果解读

    一 什么是探索因子分析 探索因子分析主要用于对问卷数据进行统计分析 通常我们在做问卷分析的时候 如果我们设计的题项没有明确的维度划分 而我们又需要了解这些题项的维度 这时我们就需要对这题项进行探索因子分析 通过在SPSS中进行探索因子分析
  • Docker世界 -- 基础篇(入门)

    一 Docker概述 1 1 Docker 为什么会出现 一款产品从开发到上线 从操作系统 到运行环境 在到应用配置 作为开发 运维之间的协作 我们需要关心很多东西 这也是很多互联网公司都不得不面对的问题 特别是各种版本的迭代之后 不同版本
  • Python 3 安装 redis 客户端

    1 去GIThub 上下载 redis py 2 然后进入源码目录 执行 sudo python3 setup py install 就可以了 这里踩了一个坑 就是我按照GITHub上介绍的方式 sudo python setup py i
  • 区块链矿工如何以七个步骤处理挖掘工作并进行交易

    你有没有想过区块链的挖掘过程如何进行的 或者你的交易如何得到确认并添加到了区块链 好吧 我也是如此 由于我找不到任何明确的逐步解释这个过程文章 我决定深入研究并自己编写指南 以下是区块链交易如何通过七个步骤从你的钱包处理到区块链中 imag
  • git 第一次push error: failed to push some refs to

    第一次将本地文件push到远程时报错 error failed to push some refs to 远程地址 原因可能是github仓库中的README md文件不在本地代码目录中或要先pull 遇到错误要善用git的提示 报错信息后
  • yolov7 paper阅读笔记

    不同于现有的主流方法 yolov7的主要改进点在优化训练过程 包括优化modules 和 优化方法 这些会加强traing cost从而提高object detect的accuracy 但是不会提高inference cost 时间开销 这
  • calibrate_camera函数示例

    好的 下面是一个使用 Python 语言的 calibrate camera 函数示例 import numpy asnp import cv2 def calibrate camera images pattern size 准备对象点和
  • OSSEC直接向GMAIL发送alert的配制方法

    按照mannul的介绍 直接在ossec conf中配置如下
  • 手把手教你使用TensorFlow训练出自己的模型

    手把手教你使用TensorFlow训练出自己的模型 一 前言 搭建TensorFlow开发环境一直是初学者头疼的问题 为了帮忙初学者快速使用TensorFlow框架训练出自己的模型 作者开发了一款基于TensorFlow 2 3 0的图形化
  • java asynccallback_使用 AsyncCallback 处理异步调用

    参考文章 原文 异步调用可以避免主线程受工作线程阻塞 即工作线程执行的过程中 主线程依然可以往下运行 不必等待工作线程完成 下面是一个简单的异步调用加法函数的例子 using System using System Threading th
  • 肺部ct重建_肺部CT血管分割及三维重建

    摘要 现代社会人们的生活水平不断改善 由于膳食不合理以及锻炼的缺乏 我国血管类疾病发生率不断攀高 传统的逐张读片的诊断方式效率低下且依赖于医生个人的知识储备 本文以肺部CT序列为着重点 对其中的血管结构进行分割 使用三维重建技术对分割结果进
  • Git入门与使用 (三) 使用GitHub进行代码托管的相关操作

    文章目录 一 前言 二 使用GitHub进行代码托管的相关操作 1 推送本地仓库内容至远程仓库 2 克隆远程仓库内容至本地仓库 3 邀请他人加入项目团队 4 拉取远程仓库修改的内容 5 解决协同开发时产生的冲突 6 跨团队协作开发 7 Gi