1 GitHub是什么

参考GitHub官网
归属公司:微软公司
在这里插入图片描述
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。

GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。

目前,其注册用户已经超过350万,托管版本数量也是非常之多,其中不乏知名开源项目Spring、MyBatis、React、Vue等。

2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台GitHub。

2020年3月17日,Github宣布收购npm,GitHub现在已经保证npm将永远免费使用。

1.1 网页术语

sign up 签约,注册
sign in 登录
revision 修订
inspiration 灵感 
collaborators 合作者
fork 岔开分支
ahead of 早于,领先
Permanently 永久地
profile 概述
gist 要点,主旨,大意

2 GitHub的使用

网址https://github.com/
账号/密码1%%%4@qq.com/b%%%b%%%@1%%2
代码仓库地址https://github.com/bingran-maker/web-example.git。

2.1 网页端介绍

参考操作教程

2.1.1 资源搜索

在这里插入图片描述
输入关键字后回车就会开始搜索,然后显示搜索结果。
在这里插入图片描述

点击进入,即可看到整个项目结构及源码。
通过这个绿色的按钮我们可以对资源进行下载。
在这里插入图片描述
仓库地址,可以通过git工具进行克隆。
可以直接下载ZIP压缩包。

2.1.2 创建仓库

在网页的左侧就是你的代码仓库,你可以点击New进行创建。
在这里插入图片描述

输入仓库名和仓库的描述或说明,然后点击Create repository。

在这里插入图片描述
这样仓库就创建完成了,只不过现在的仓库是空的,还什么也没有,所以这里它推荐你从其它地方导入代码进来或者推送代码进来。
可以点击creating a new file来创建新文件。
填上文件名,然后随意编写一些文件内容,完成后将网页拉至底部。
填写这次创建文件的说明,然后点Commit new file。

可以点击uploading an existing file来上传文件。
可以在命令行中创建新的仓库。

mkdir mytest #创建文件夹
cd mytest #进入目录
echo "# ooo" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/bingran-maker/ooo.git
git push -u origin main

输入用户名和密码
在这里插入图片描述
可以在命令行中推送已有的仓库。

git remote add origin https://github.com/bingran-maker/ooo.git
git branch -M main
git push -u origin main

2.1.3 团队协作

Github的优势就是团队成员都可以参与到各种开源项目的编写。
已经创建了一个仓库,以这个仓库为例,进行团队开发。
首先在这个仓库中加入团队成员。
在这里插入图片描述
可以通过下面的搜索框进行用户搜索,输入用户的用户名或者邮箱地址进行搜索,成功搜索到之后点击Add to this repository即可将该用户添加为这个仓库的协作者。
在这里插入图片描述

这个时候该用户会收到一条通知,只有他同意了才会参与到这个仓库的开发中来。还可以对团队中的成员进行权限的设置,以便更加高效地开发。

2.1.4 参与开源项目

如何去参与一个开源项目,比如人气极高的bootstrap,这是一个非常强大的CSS框架。
(1)在整个网站中搜索bootstrap,然后进入仓库主页。
(2)然后点Fork,就会在自己的账号下克隆一个bootstrap仓库。
在这里插入图片描述(3)然后从自己的账号下克隆,这里就必须要使用git工具了,输入git指令。
在这里插入图片描述

git clone https://github.com/bingran-maker/bootstrap.git

注意一定要从自己的账号下clone仓库,这样你才能推送修改,如果从bootstrap作者的仓库地址克隆,因为没有权限,你将不能推送修改,除非作者将你列为该仓库的协作者,但显然这是不可能的。

Bootstrap的官方仓库twbs/bootstrap、你在GitHub上克隆的仓库my/bootstrap,以及你自己克隆到本地电脑的仓库,他们的关系就像下图显示的那样:
在这里插入图片描述
如果你想修复bootstrap的一个bug,或者新增一个功能,立刻就可以开始干活,干完后,往自己的仓库推送。

如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request,当然,对方是否接受你的pull request就不一定了。

2.1.5 如何合并代码

我们知道,git拥有极其强大的克隆和分支功能,在团队协作中,你自己作为团队项目的主干,其它成员就各自有一条分支,每个人都在自己的分支上工作,互不影响,这样能最高效地开发项目。

当每个人的项目功能都完成后,就是合并代码的时候了,所有人的代码都合并完成并没有发生错误,整个项目就完成了。那么,在Github中,该如何合并代码呢?
还是以上面创建的仓库为例,使用git工具将仓库clone到了桌面上,我们叫它本地仓库。

然后在本地仓库新建了一个分支,模拟第二个程序员进行的操作,第二个程序员创建了一个hello.txt文件,然后通过git工具推送到了Github仓库里。

git branch test0727 创建分支test0727
git checkout test0727 切换到分支test0727
echo "# test0727" >> hello.txt
git add hello.txt
git commit -m "your commit"
git remote add origin https://github.com/bingran-maker/ooo.git
git push -u origin test0727

两个分支。
main分支中只有一个文件。
在这里插入图片描述
test0727分支中有两个文件。
这个分支有一个commit早于main分支。
在这里插入图片描述
点击Compare按钮,对比分支间的变化。
在这里插入图片描述会发现,这些分支能够自动合并,是因为当前两个分支的内容互不冲突,点击Create pull request,这样我们可以在下面填写一些关于此次合并的说明,然后再点击Create pull request进行合并。
在这里插入图片描述继续点击Merge pull request。

在这里插入图片描述继续点击confirm merge。
在这里插入图片描述我们回到仓库主页,发现文件成功进来了。
而当你的提交和其它人的提交产生了冲突,比如同时创建了一个变量,亦或是同时修改了某个文件的公共部分,此时就无法自动合并,这样,你得通过git工具将他人的代码更新到自己的本地仓库,然后在本地将冲突解决,再推送到Github,其他人再对自己的代码进行更新即可。

2.2 什么是Pull Request操作

Github官方文档的定义如下:Pull Request 是一种通知机制。
你修改了他人的代码,将你的修改通知原来的作者,希望他合并你的修改,这就是 Pull Request。"

Pull Request 本质上是一种软件的合作方式,是将涉及不同功能的代码,纳入主干的一种流程。这个过程中,还可以进行讨论、审核和修改代码。

Pull Request 的流程
(1)你需要把别人的代码,克隆到你自己的仓库,Github 的术语叫做 fork。
(2)在你仓库的修改后的分支上,按下"New pull request"按钮。
这时,会进入一个新页面,有Base 和 Head 两个选项。
Base 是你希望提交变更的目标。
Head 是目前包含你的变更的那个分支或仓库。
(3)填写说明,帮助别人理解你的提交,然后按下"create pull request"按钮即可。

PR 创建后,管理者就要决定是否接受该 PR。对于非代码变更(比如文档),单单使用 Web 界面就足够了。但是,对于代码变更,Web 界面可能不够用,需要命令行验证是否可以运行。

2.3 拉取远程代码

弹窗输入用户名和密码username和password
为解决每次输入的问题,可以进行配置

git config --global user.name "用户名"
git config --global user.email "邮箱"

2.3.1 使用git pull

git pull相当于是从远程获取最新版本代码并自动merge。将远程仓库最新commitid记录更新到本地remote中,同时本地head也更新到远程拉取下来的commitid记录。

(1)新建一个空目录并进入,目录名为mytest
mkdir yourtest
cd yourtest

(2)创建一个空的Git存储库或重新初始化现有的Git存储库 
git init

使用"master"作为初始分支的名称,此默认分支名称可能会更改。
要配置在所有新存储库中使用的初始分支名称,请调用:
git config --global init.defaultBranch <name>
通常选择“main”、“trunk”和“development”来代替“master”。
可以通过以下命令重命名刚刚创建的分支:
git branch -m <name>

(3)与远程仓库建立连接用origin作为远程地址的别名
语法git remote add origin 地址.git
git remote add origin https://github.com/bingran-maker/ooo.git

(4)在本地创建分支main并切换到该分支
git checkout -b main(本地分支名称) 

(5)把某个分支上的内容都拉取到本地
git pull origin main(远程分支名称)

(6)回到本地文件夹yourtest查看,已完成拉取远程某个分支到本地

2.3.2 使用git fetch

git fetch相当于是从远程获取最新版本到本地,不会自动merge。只是将远程仓库最新commitid记录更新到本地remote中对应的远程分支,而本地head不更新,仍然保持本地的commitid。

(1)新建一个空目录并进入,目录名为mytest
mkdir yourtest
cd yourtest

(2)创建一个空的Git存储库或重新初始化现有的Git存储库 
git init

(3)与远程仓库建立连接用origin作为远程地址的别名
语法git remote add origin 地址.git
git remote add origin https://github.com/bingran-maker/ooo.git

(4)把远程分支拉到本地
git fetch origin main(main为远程仓库的分支名)

(5)在本地创建分支main并切换到该分支
git checkout -b main(本地分支名称) 

(6)合并分支
git merge origin/main

(7)回到本地文件夹yourtest查看,已完成拉取远程某个分支到本地

2.4 创建本地分支dev和master

在dev中操作后,切换回master,合并。

git checkout -b dev创建分支并切换
git branch dev创建分支

git checkout master切换
git merge dev合并

2.5 配置SSH

克隆代码也可以使用SSH的方式。
在这里插入图片描述

git clone -b 指定分支名称  项目ssh地址
git clone 项目ssh地址
例如git clone -b test0727 git@github.com:bingran-maker/ooo.git

提示Please make sure you have the correct access rights and the repository exists.
解决方案如下:

(1)在git设置一下身份的名字和邮箱
git config --global user.name "yourname"
git config --global user.email "your@email.com"
注:yourname是你要设置的名字,your@email是你要设置的邮箱。
(2)git bash输入命令
ssh-keygen -t rsa -C "your@email.com"(请填你设置的邮箱地址)
直接按下回车,然后系统会自动在/root/.ssh文件夹下生成两个文件,
id_rsa和id_rsa.pub,用记事本打开id_rsa.pub,将全部的内容复制。

打开gitHub,登陆你的账户,进入设置,进入ssh设置。
Settings——>SSH and GPG keys
在这里插入图片描述点击New SSH key,然后将复制的内容粘贴进去。
在这里插入图片描述然后使用下面的命令就可以克隆代码了。
git clone -b test0727 git@github.com:bingran-maker/ooo.git

3 异常和解决

3.1 fatal: refusing to merge unrelated histories

git pull 失败 ,提示:fatal: refusing to merge unrelated histories

其实这个问题是因为 两个根本不相干的 git 库, 一个是本地库, 一个是远端库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并。

具体的方法, 是从远端库拉下来代码 ,本地要加入的代码放到远端库下载到本地的库, 然后提交上去 , 因为这样的话, 你基于的库就是远端的库, 这是一次update了

3.2 fatal: remote origin already exists

注意:如果报以下异常【fatal: remote origin already exists.】
git remote rm origin

3.3 fatal: The remote end hung up unexpectedly

注意:如果报以下异常
问题描述:Git在推送项目时报错:fatal: The remote end hung up unexpectedly。
问题原因:推送的文件太大。
解决方法:修改设置git config文件的postBuffer的大小。(设置为500MB)
git config --local http.postBuffer 524288000

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐