主要介绍GitHub和Gitee。
托管平台 | 优点 | 缺点 |
---|---|---|
GitHub | (公开和私有仓库)完全免费,支持自定义域名https访问、支持WebHook,国内访问速度一般 | 百度收录比较困难 |
Gitee | 支持自定义域名https访问、支持WebHook,国内访问速度快 | 自定义域名及其他进阶功能需要付费、自定义域名需备案 |
Gitlab | 支持无限的公有仓库和私有仓库 | |
Coding | 完全免费 | 访问速度慢(可以使用国内CDN加速) |
腾讯云对象存储COS | 访问速度非常快、收费、支持私有仓库静态网站、支持Hexo图床、可以设置防盗链 | 自定义域名必须要备案、配置比较复杂、可能要付费、不支持WebHook |
Readthedocs | 创建、托管和浏览文档,存放不同语言的各种库的文档(静态页面)的网站,内部支持使用Sphinx/Mkdocs | |
Bitbucket | 免费支持5个开发成员的团队创建无限私有代码托管库 | |
Sourceforge |
GitHub提供Git仓库托管服务,只要注册一个GitHub账号,就可以免费获得远程仓库,是用于版本控制和协作的代码托管平台,方便多人在任何地方协同工作。
官方文档:GitHub Guides、GitHub Help。
注册GitHub帐户
在GitHub网站首页注册或在导航栏中点击“sign up”注册,如下图:
帐户设置
在上方导航栏的右侧点击“登录头像”,在弹出的列表中点击“Settings”菜单项:
可以在GitHub中创建多个仓库。一个仓库应该只组织一个项目。仓库可以包含项目中的所有或部分文件(文件夹、文件、图片、视频、电子表格、数据集等)。
新建仓库
方法1:登录(sign in)帐号后,在欢迎界面点击“Start a project”按钮
方法2:在左侧的仓库列表中
完全空白时,(如上图所示)点击“Create a repository”按钮
已有仓库时,点击“New”按钮
方法3:在上方导航栏的右侧点击“+”(登录头像左侧),在弹出的列表中点击“New repository”按钮
仓库设置基本信息
创建仓库后,进入新建仓库设置页面:
Owner:所有者,自动调取用户名称
Repository name:必选,仓库名称。不能有中文(无法显示中文)
Description:可选,仓库的描述
设置仓库权限
Skip this step if you’re importing an existing repository
如果要导入现有存储库,请不要勾选下面选项:
Initialize this repository with a README:
勾选后,GitHub自动创建一个README.md文件初始化此仓库。
可添加忽略文件(.gitignore)和许可证(license)。
Create repository:设置后,点击“Create repository”创建一个新的远程仓库
仓库设置
某一个仓库的具体设置。
在仓库列表中点击某一个仓库名,进入仓库页面,点击工具栏中的“Settings”:
进入仓库的设置页面:
推送仓库
仓库的代码(Code)页面,显示了将本地仓库推送到远程仓库的命令:
仓库非空白时,“Code”页面显示已推送的代码文件。
GitHub Pages旨在托管GitHub存储库中的个人,组织或项目页面。
GitHub Pages在使用上的限制:
传闻:GitHub Pages屏蔽了百度爬虫的抓取,导致百度无法抓取GitHub Pages网页。
本地仓库和GitHub仓库之间的传输可以通过SSH协议加密传输。在传输前,GitHub需要识别是谁提交了推送(防止别人冒充),GitHub核对了你的公钥,就确认是你自己在推送。
本地创建SSH Key
查看当前用户目录(C:/Users/用户名/.ssh)内有没有id_rsa和id_rsa.pub这两个文件:
若有,表示本地已创建了SSH Key,此步骤可忽略
若无,或想更换SSH Key
Git Bash运行ssh-keygen -t rsa -C "用户E-mail"
命令
$ ssh-keygen -t rsa -C "xxx@hotmail.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa):
直接按Enter键采用默认路径
Created directory '/c/Users/xxx/.ssh'.
Enter passphrase (empty for no passphrase):
输入密码后,生成SSH Key
Your identification has been saved in /c/Users/xxx/.ssh/id_rsa.
Your public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.
The key fingerprint is:
…………
The key's randomart image is:
…………
GitHub添加SSH Key
登陆帐号后,在上方导航栏的右侧点击“登录头像”,在弹出的列表中点击“Settings”
进入“Personal settings”界面,左侧点击“SSH and GPG keys” ,点击“New SSH key”
进入SSH keys添加界面
验证是否成功,在git bash下输入:
$ ssh -T git@github.com
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?yes
Warning: Permanently added the RSA host key for IP address 'xxxxxx' to the list of known hosts.
Enter passphrase for key '/c/Users/xxx/.ssh/id_rsa':
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
第一次使用SSH key时,将触发一个SSH警告:
The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
RSA key fingerprint is xx.xx.xx.xx.xx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
因为Git使用了SSH连接,SSH在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key指纹信息是否真的来自GitHub的服务器,输入yes
回车即可。
如果担心有人冒充GitHub服务器,输入yes
前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。
输入yes
回车后,Git会再弹出一个警告:
Warning: Permanently added 'github.com,xx.xx.xx.xx' (RSA) to the list of known hosts.
Enter passphrase for key '/c/Users/xxx/.ssh/id_rsa':
警告信息表示已将GitHub的Key添加到本机系统的一个信任列表内(C:/Users/当前用户名/.ssh/known_hosts)。
提示输入密码是因为在本地创建SSH Key时设置了密码。若输错密码:
Received disconnect from xx.xx.xx.xx: Bye Bye
Disconnected from xx.xx.xx.xx
身份验证成功
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
您已经成功地进行了身份验证,但是GitHub不提供shell访问。
个人访问令牌(Personal access tokens)主要用于脚本(scripts)或测试(testing),功能类似于普通的OAuth访问令牌。可以代替HTTPS上的Git密码,也可以用于 通过基本身份验证向API进行身份验证。
创建token
路径:页面上方导航栏的右侧点击“登录头像” — 在弹出的列表中点击“Settings” — 在“Personal settings”界面,左侧点击“Developer settings” — 左侧点击“Personal access tokens” — 右侧点击“Generate new token”。
定义(选择)token的访问范围后,点击最下面的“Generate token”按钮生成token:
复制token
返回“Personal access tokens” 页面,提示“Make sure to copy your new personal access token now. You won’t be able to see it again!”
GitHub有一个Fork(分叉)操作,进入某个上游仓库(第三方的开源仓库)后,点击“Fork”按键(即执行分叉操作),可以将此仓库克隆至自己的GitHub仓库。
这个仓库(项目)的使用方法和自己的仓库一样,例如:
克隆至本地仓库:git clone 自己的远程仓库地址
修改和推送等操作是在本地完成,因此一定要在自己的账号下clone仓库。推送修改,需要第三方提供“Pull requests”权限。
GitHub在国内访问速度慢的问题原因有很多,但最直接和最主要的原因是GitHub的分发加速网络的域名遭到dns污染。例如有时无法显示图片(图片挂掉了):
报错Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID:用一个错误的域名访问了某个节点的https资源。
导致这个错误的原因基本是:
修改系统的hosts文件,绕过国内dns解析,直接访问GitHub的CDN节点。效果一般。
以GitHub网站为例,修改系统的hosts文件,达到网站加速访问的效果:
获取域名
图片挂掉的域名
打开GitHub任意带有挂掉图片的网页,在挂掉的图片上"检查元素”,定位到该图片的标签,复制其URL(src属性)备用,指从https://(不包含)到com(包含)的内容。
github.com:GitHub网站
GitHub的其它子域名:可在IPAddress.com网站内查看
assets-cdn.github.com:GitHub Pages网站
avatars0.githubusercontent.com:GitHub的用户头像等
github.global.ssl.fastly.net
获取IP地址
当一个域名使用CDN时,会有多个IP地址。不同地点的DNS服务器会影响访问速度。
使用cmd,只能查看最近的DNS服务器维护的IP地址
$ nslookup github.com
服务器: cache-a.xxx.xxx.xxx
Address: xxx.xxx.xxx.xxx
非权威应答:
名称: github.com
Address: 13.229.188.59
使用IPAddress.com网站,在搜索框内输入域名可得到:DNS服务器、IP地址、子域名等众多信息,但没有直观显示IP地址的TTL值。
多次点击“检测”,可获取多个IP地址
海外服务器的速度(响应时间)是不确定的,“老板”想限速就限速。所以不能简单地认为TTL值最小就是速度最快
相同云服务商的ip速度肯定是差不多的,因此对每个服务商只测试一个ip
在本地测试(Ping)上面所有ip的响应时间和TTL值:
$ ping 13.229.188.59
正在 Ping 13.229.188.59 具有 32 字节的数据:
请求超时。
请求超时。
请求超时。
请求超时。
13.229.188.59 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
使用chinaz网站的Ping检测,自动获取IP地址并Ping检测
在响应时间最短的前提下,选择TTL值最小的IP地址。
github.com的最优IP地址是192.30.253.112
:
在本地测试(Ping)最优IP地址:
$ ping 192.30.253.112
正在 Ping 192.30.253.112 具有 32 字节的数据:
来自 192.30.253.112 的回复: 字节=32 时间=265ms TTL=45
来自 192.30.253.112 的回复: 字节=32 时间=266ms TTL=45
来自 192.30.253.112 的回复: 字节=32 时间=264ms TTL=45
来自 192.30.253.112 的回复: 字节=32 时间=267ms TTL=45
192.30.253.112 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 264ms,最长 = 267ms,平均 = 265ms
GitHub的其他子域名,可以采用类似方法寻找最优ip。
可在cmd下输入tracert URL或IP
命令(Windows路由跟踪程序)查看IP数据包访问目标时经历的路径(访问国外时速度很慢):
$ tracert github.com
通过最多 30 个跃点跟踪
到 github.com [192.30.253.112] 的路由:
1 <1 毫秒 <1 毫秒 <1 毫秒 xxx.xxx.xxx.xxx # 用户路由的私有IP
2 2 ms 4 ms 4 ms xxx.xxx.xxx.xxx # 用户光猫的私有IP
3 7 ms 4 ms 2 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
4 6 ms 4 ms 5 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
5 3 ms 2 ms 2 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
6 3 ms 4 ms 3 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
7 213 ms * 216 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
8 210 ms 213 ms 202 ms xxx.xxx.xxx.xxx # 国内电信的机房IP
9 212 ms 203 ms 203 ms ae0.mcs1.ams10.nl.eth.zayo.com [64.125.29.68]
10 273 ms 254 ms 268 ms ae1.cs1.ams10.nl.eth.zayo.com [64.125.29.70]
11 256 ms 257 ms 251 ms ae2.cs1.lhr15.uk.eth.zayo.com [64.125.29.17]
12 * * * 请求超时。
13 253 ms * 261 ms ae5.cs3.lga5.us.eth.zayo.com [64.125.29.126]
14 260 ms 262 ms 249 ms ae4.cs1.dca2.us.eth.zayo.com [64.125.29.203]
15 263 ms 273 ms 251 ms ae0.cs2.dca2.us.eth.zayo.com [64.125.29.229]
16 258 ms * * ae9.cs4.iad93.us.eth.zayo.com [64.125.25.101]
17 248 ms 256 ms 256 ms ae7.er1.iad47.us.zip.zayo.com [64.125.30.131]
18 248 ms * 249 ms 209.66.120.179.IPYX-243981-003-ZYO.zip.zayo.com [209.66.120.179]
19 * * * 请求超时。
20 * * * 请求超时。
21 * * * 请求超时。
22 245 ms 245 ms 245 ms github.com [192.30.253.112]
跟踪完成。
修改hosts
修改hosts文件(C:/Windows/System32/drivers/etc/hosts),使IP直接映射域名。
hosts文件示例:
# 以下是自定义内容。IP映射域名语法:IP地址+空格+域名
192.30.253.112 github.com
185.199.111.153 assets-cdn.github.com
151.101.1.194 github.global.ssl.fastly.net
151.101.64.133 avatars0.githubusercontent.com
151.101.64.133 avatars1.githubusercontent.com
151.101.64.133 avatars2.githubusercontent.com
151.101.64.133 avatars3.githubusercontent.com
151.101.64.133 avatars4.githubusercontent.com
185.199.110.153 github.io
140.82.113.10 codeload.github.com
157.230.37.202 netlify.com
刷新系统dns缓存
适用于Windows平台,Linux可跳过此步骤。
用WIN+R快捷键打开运行窗口,输入命令:cmd
并回车进入命令行窗口。接着输入命令:ipconfig /flushdns
回车后执行刷新本地dns缓存数据即可。
$ ipconfig /flushdns
Windows IP 配置
已成功刷新 DNS 解析缓存。
效果很好,但略显麻烦。此方法只适用于git clone
时。
点击页面右上角的 “+” 号(帐户头像左侧),选择“新建仓库”:
在新页面中点击“导入已有仓库”:
输入需要导入的Github项目的git地址,点击“创建”
Gitee拉取过程的耗时因拉取项目大小而异,完成后就可以在Gitee中高速git clone
$ git clone git@gitee.com:用户名/hugo-theme-learn.git
Cloning into 'hugo-theme-learn'...
remote: Enumerating objects: 2317, done.
remote: Counting objects: 100% (2317/2317), done.
remote: Compressing objects: 100% (1017/1017), done.
remote: Total 2317 (delta 1266), reused 2317 (delta 1266)
Receiving objects: 100% (2317/2317), 13.42 MiB | 2.46 MiB/s, done.
Resolving deltas: 100% (1266/1266), done.
对比GitHub只有几十K/s的龟速,Gitee的总耗时少了很多
下载后,若无需要,删除Gitee上导入的项目仓库;若有需要,可在以后同步:
Pull Request(PR)和Merge Request(MR):
在GitHub向开源库贡献代码或者修复bug时
一般开源库不会给其他人开放push权限。
若有好想法或者发现开源库有bug时,怎么才能将自己的想法贡献给开源库呢?
在企业多人开发协作时 在开发产品时,通常挑选一个分支作为上线的正式版本分支(例如master或release),开发分支例如命名为develop,可能带有bug。 当多人参与同一个项目时,每个人都有Commit到master分支的权限是非常不合理的。这个时候,就可以使用Fork + PR/MR的方式来实现多人协作开发,这样协作开发效率高,问题少:
每个开发者先Fork一份代码到自己的账号下
功能完成后发PR给项目管理者
项目管理者Code Review后确认无误后即可进行Merge操作
使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况。如果希望体验Git飞一般的速度,可以使用国内的Git托管服务——码云。
基本用法参考GitHub,码云全中文显示,应该上手很简单。
利用Gitee Pages服务搭建图床(托管图片),参阅:使用gitee搭建免费的图床。
准备工作
在Gitee新创建一个仓库
添加文件index.html(名称必须是index.html)
进入新建仓库页面,点击工具栏中的“文件”,点击“新建文件”:
选择pages服务并启动
在仓库页面的菜单栏点击“服务”,选择”Gitee Pages”:
进入Gitee Pages界面后
访问生成的网站地址
已开启Gitee Pages服务后,访问page首页地址。
将gitee的图床仓库拉取到本地
然后将本地路径的图片目录放到本地仓库的项目路径内。
优化gitee page首页
日常使用
感谢您的赞赏支持: