Git于GitHub上的应用

回顾本地库与远程库的交互方式

在这里插入图片描述
所以现在我们按照上面的过程,来实现一下这个事情。

初始化本地库

这里我在D盘下创建本地库GitResp2:
在这里插入图片描述
然后记得,一定要初始化,否则这个文件夹和Git是没有关系的:
在这里插入图片描述
然后我们创建一个Demo.txt文件,并将其添加到我们的本地仓库中:
在这里插入图片描述

初始化远程库

这你首先得有个GitHub的帐号哈…
进入GitHub,点击右上角有个+号,然后new repository(创建一个新的仓库):
在这里插入图片描述
如果你是第一次使用的话,会弹出下面让你验证邮箱的操作:
在这里插入图片描述
这个很简单,就按照它的做就行了,然后我们会老到下面的页面:
在这里插入图片描述
Owner默认就是当前账号的主人,然后/表示该账号下的新建的仓库名,一般都选择其和我们的本地仓库名一样,所以我们叫GitResp2;然后Descripiation就是我们对这个仓库的描述和介绍。
然后public和private都是我们很熟悉的了,公有就大家都能看,私有就只有自己能看。然后下面还有一个Initialize this repository with a README,这意思我们将初始化这个库并让其伴随一个ReadMe文件,要就勾上不要就不勾:

在这里插入图片描述
点击Create repository,创建完成之后如下:
在这里插入图片描述

在本地创建远程库地址的别名(建立关联)

现在我们本地库和远程库都有了,所以现在我们要做的事情就是将本地库里的东西推送到远程库中,所以必须得让它俩建立起联系呀。方式就是我们要拿到我们GitHub上创建的这个远程库的地址:
首先我们查看我们GitHub上的远程库有哪些:
在这里插入图片描述
点击进入:
在这里插入图片描述

当然了,这实际上就是刚刚的东西…-_-||
不过我们GitResp的地址也在上面啦,就是红框里面的地址,有两种方式Https和SSH,这里我们先用Https:https://github.com/TheAmazingSea/GitResp2.git
但是呢每次都要读取这一段长地址会很麻烦,所以Git在本地可以将地址保存,然后通过起别名的方式将其记录下来:
首先用git remote -v查看当前有没有远程地址的别名:
在这里插入图片描述

可以看到现在没有任何远程地址的别名,那么现在我们添加一个别名,叫origin:
格式为:git remote add [别名儿] [远程库地址]
在这里插入图片描述
现在再查看本地仓库中的远程地址别名可以看见:
在这里插入图片描述
其中fetch表示可以从这个地址拉取文件,push表示我们可以推送文件到这个地址。

实现推送操作

用push命令即可:
格式如下:git push [地址,也就是别名] [推送的分支名]
在这里插入图片描述
敲下回车后,会产生一个弹框要你输入你的GitHub帐号:
在这里插入图片描述
当然了如果你不是第一次登陆了,那就不会有这对话框,它就直接推送了:
在这里插入图片描述

然后我们去看GitHub上就已经有了Demo.txt文件:
在这里插入图片描述
并且还能看到里面的内容:在这里插入图片描述

克隆操作

有人推送代码到远程库,那肯定就有人需要将其clone到自己的电脑里进行代码编写,所以接下来我们完成一下这个clone操作。
因为我是一个人操作,所以为了不引起冲突,因为我之前的本地仓库都在D盘,所以我现在在C盘进行一个clone操作:
格式:git clone [文件地址]
首先找到这个文件的地址:
在这里插入图片描述

然后执行命令:
在这里插入图片描述
可以看见C盘中已经出现了我们的克隆文件:

克隆操作可以替我们完成:
1、初始化本地库
2、将远程仓库内容完整的克隆到本地
3、替我们创建远程库的别名
在这里插入图片描述

邀请加入团队_push操作

现在我们在C盘中的GitResp2中对再新建一个Demo2.txt文件:
在这里插入图片描述
然后现在将其提交到本地库中:
在这里插入图片描述
提交到本地库中后,现在可以推送到远程库中:
在这里插入图片描述
然后现在我们就可以去GitHub上查看是否接收到了该文件:
在这里插入图片描述
但是这里有一个问题,Demo2.txt是另一个人写的,它不应该可以随意就将文件push到我们的项目中啊,这个repository又不是他创建的对叭!这里应该有一个类似于申请加入团队的操作才对,但为什么我们这可以成功呢?这是因为我用的是一台电脑,所以电脑上有Git的缓存,导致他push时直接就取了缓存中的内容直接推送成功了,一般情况下另一个人要往这个repository中推送文件时是会需要登录GitHub帐号的。
我们清空缓存:
在这里插入图片描述
然后现在又在C盘中的GitResp2(C盘中的GitResp2我们将其定义为另一个开发者)中新建一个Demo3.txt,然后将其提交到本地库中:
在这里插入图片描述
然后G现在进行push的话它会让我们登录(也就是另一个人的GitHub帐号):
在这里插入图片描述
但是会失败:
在这里插入图片描述
因为他没有权限呀!所以现在我们需要让该repository仓库主人的github帐号对其做一个邀请加入团队的操作:
先进入这个项目的settings:
在这里插入图片描述
然后进入Manage access(管理权限):
在这里插入图片描述
点击Add people:
在这里插入图片描述
输入其他开发者的帐号名称即可邀请该开发者进入该项目一起工作。
然后下面就会有一个你想要邀请的一个成员的列表:
在这里插入图片描述
现在这次我们就只有这一个,所以把他勾上就行:
在这里插入图片描述
勾上之后点击那个Pending Invite将其复制,然后把它粘贴出来:
在这里插入图片描述
这个链接我们就可以交给我们所邀请的那个人,现在我们登录邀请的那个人的帐号,然后在他的地址栏里面打开复制这个链接出现以下页面:
在这里插入图片描述

可以看到收到了邀请,然后点击接受邀请(Accept invitation)就行了,现在就进入了团队:
在这里插入图片描述
现在再进行push操作,只要将你的用户名(被邀请者)输入就可以完成push操作了:
在这里插入图片描述

远程库修改的拉取

远程库中的内容被修改之后,我们就可以通过pull操作将其拉取下来,pull操作分为两个操作:fetch和merge。
在这里插入图片描述
确认远程库中的东西被修改了之后,项目经理就开始进行拉取操作:

先用fetch,对远程库进行一个文件的读取操作,它会将远程库中的内容读取到本地库中,但不会读到工作区和暂存区中,所以工作区中不会出现有拉取到的文件内容:
在这里插入图片描述
拉取后,我们可以先去远程库看看内容是否正确:
切换到远程库后,用ll命令查看。
在这里插入图片描述
然后发现内容都正确的话,就可以进行合并操作了:
进行合并:merge操作
合并之前,先切换回本地库中的master:
在这里插入图片描述
然后就能在本地工作区中看到拉取下来的文件内容啦!
这两步也可以直接合并为一个命令:pull嗷。
在这里插入图片描述
那么啥时候用fetch+merge啥时候用pull呢?
fetch+merge:当我们需要保险一点、慎重一点的时候,用这个。
pull:当我们图省事儿的时候。

协同开发合作时冲突的解决办法

当我们两个开发者对同一个远程库的同一个文件的同一个位置上进行操作时,必然会产生冲突问题。
接下来我们就演示一下怎么解决冲突,在这之前我们需要人为的制造一个冲突:
我们先让开发者A推送一个Test.txt文件:
在这里插入图片描述
然后再让开发者B去拉取该项目的这个Test.txt文件:
在这里插入图片描述
到现在为止,远程协作还没有任何问题。
现在操作同一个文件的同一个位置的时候,就会引起冲突:
我们先让开发者B修改Test.txt文件:
在这里插入图片描述
然后将其推送回远程库:
在这里插入图片描述
然后现在开发者A也对该Test.txt文件做一点改动:
在这里插入图片描述

让他也将改动后的Test.txt文件推送到远程库中,这时候就会有冲突报错:
在这里插入图片描述

发现推送失败,在这种冲突的情况下,我们应该先拉取下来,然后修改冲突然后再推送到远程库中才能解决。
所以现在先拉取:
在这里插入图片描述
我们打开拉取下来的文件,可以看见冲突位置:
在这里插入图片描述
然后现在我们就按照之前的解决方法,选一个留下来即可。

跨团队协作如何开发

先回顾一下跨团队开发的工作流程。
在这里插入图片描述
如上图所示,假如该项目需要另一位B公司程序员加入开发,那么B公司程序员应该先将A公司中的项目fork到B公司的远程库中去,然后B公司程序员再在B公司的远程库里拉取到本地进行工作,操作完再push到B公司的远程库中,直到全部任务完成后,B公司的远程库再执行一个pull request命令的操作将文件内容全部推送到A公司中,A中的项目经理会进行审核,审核通过后会merge到A公司的远程库中。

演示跨团队合作流程

1、得到A公司远程库的地址

在这里插入图片描述
把地址拿出来:
在这里插入图片描述

2、B公司程序员进行fork操作

B公司程序员进入他的GitHub帐号后,将上面的地址放入到地址栏中,然后点击下面的fork操作:
在这里插入图片描述

然后可以看见左上角我们已经从A公司fork到了这个项目:
在这里插入图片描述
3、B公司程序员从B公司的远程库中clone下来刚刚fork的项目
在这里插入图片描述
然后B公司程序员就会拥有一个GitResp2的库。
假设B公司程序员将项目进行了改动,然后又将其推送到B公司的远程库中:
在这里插入图片描述
然后现在假设项目已经全部完成,那么B公司就该将自己的远程库中的代码全部退还给A公司,用pull request操作:
在这里插入图片描述
点击之后,然后创建一个新的pull request
在这里插入图片描述
在跳转之后的页面,点击create pull request:
在这里插入图片描述
再次跳转之后,填写一些注释信息,就可以点击create了:
在这里插入图片描述
然后A公司项目经理会去审核,登录A公司项目经理的github帐号点击pull request:
在这里插入图片描述

其中就会有一个来自B公司的pull request请求,点进去:
在这里插入图片描述
我们可以对其回信,比如回上面的内容,然后B公司的程序员就可以看到回信:
在这里插入图片描述
最终确定可以之后,可以点击上面的merge pull request:
在这里插入图片描述
合并之后就可以将该文件内容拉进来啦!

SSH免密登录

之前我们的操作每次都会重复进行一个用户身份的确认操作,非常繁琐,但是windows10系统自带了一个凭据功能,可以替我们记下用户身份而不用每次登录都进行验证。但是如果我们的系统不是win10的话,那就需要每次录入账号密码会很麻烦,所以实际开发当中不用这些方式。
我们之前都使用Http方式,但是实际开发中,我们会使用SSH方式:
在这里插入图片描述
但这不代表不需要输入账户密码了,为了达到这个目的我们需要进行一系列免密操作。

1、首先进入用户的主目录中

用cd ~命令即可:
在这里插入图片描述

2、执行命令,生成一个.ssh的目录

在这里插入图片描述
其中:
keygen是key generation的缩写。
C要大写!
后面的邮箱是你的GitHub注册帐号的时候对应的邮箱!
然后三次回车确认即可。
然后就会生成下面的东西:
在这里插入图片描述
然后我们会发现,在.ssh目录下有下面两个文件:
在这里插入图片描述

3、打开id_rsa.pub文件,将里面的内容进行复制操作

在这里插入图片描述

4、打开github帐号

在这里插入图片描述
点击settings,然后在跳转的页面中点击SSH and GPG keys:
在这里插入图片描述
点击上面的New SSH key,然后输入一个名字,另外将我们刚刚复制的那一串字符串粘贴到Key中:
在这里插入图片描述
再点击Add SSH key,然后就会生成一个我们的秘钥了。

5、生成秘钥以后,就可以正常进行push操作了

和Http的方式一样,我们也可以对ssh类型的地址进行一个起别名的操作:
在这里插入图片描述

可以看见别名已经生成了:
在这里插入图片描述
现在我们想推送东西到远程库的话就不用输账号密码啦:
在这里插入图片描述
总结一下:
SSH方式好处: 不用每次都进行身份验证
缺陷:只能针对一个账号(但现实生活中一个人也就用一个帐号呀…懂叭)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在地球迷路的怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值