编程语言-5-代码仓库GitHub的使用
1 GitHub是什么参考GitHub官网归属公司:微软公司GitHub是一个面向开源及私有软件项目的托管平台,因为只支持git作为唯一的版本库格式进行托管,故名GitHub。GitHub于2008年4月10日正式上线,除了Git代码仓库托管及基本的 Web管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过350
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
更多推荐
所有评论(0)