[TOC]


0x00 Github API使用

如果自己写的github爬虫没有特色或者没有很高的效率不如使用Github的API,数据获取可以来得快一些。

支持的验证访问方式有如下几种:

  • 未认证 (最高每小时60次访问请求限制)
  • 使用token认证 (每小时5000次的请求)
  • 使用auth认证

API token申请
Settings > Developer settings > Personal access tokens > Generate new token,选择您需要的权限,然后生成新的token;

WeiyiGeek.settings-tokens

WeiyiGeek.settings-tokens

Github API使用说明

1
2
3
4
5
6
7
8
9
10
11
12
#查看自己的剩余的次数的地址
https://api.github.com/rate_limit?access_token=a2c312b7523daf22b677434a722bb2ced9b222dc

#查看用户的issues
curl -v -H "Authorization: a2c312b7523daf22b677434a722bb2ced9b222dc" https://api.github.com/user/issues

#用户信息
https://api.github.com/users/weiyigeek
#查看用户粉丝/关注/fork量/星赞/仓库等等
https://api.github.com/users/weiyigeek/{followers,following,fork,starred,repos}

https://api.github.com/search/code?q=keyword&sort=indexed&per_page=100&page=1


0x01 学习遇到配置

仓库建立及初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#(1)进行git配置
$ git config --global user.email "self@weiyigeek.top"
$ git config --global user.name "WeiyiGeek"

#(2)初始化建立仓库并绑定仓库
echo "# SecOpsDev" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:WeiyiGeek/SecOpsDev.git
git push -u origin master

#(3)已存在的仓库绑定新的远程仓库
#push an existing repository from the command line
git remote add origin git@github.com:WeiyiGeek/SecOpsDev.git
git push -u origin master
# git remote add gitee git@gitee.com:WeiyiGeek/blog.git
# git push -u gitee master -f


Github Page 自定义域名

描述:利用自定义的域名通过域名提供商来绑定github page 或 gitee page;

Github Pages:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#Step1.设置自定义域名
Settings > Options > GitHub Pages

#step2.域名提供商那里的域名管理添加A记录(即github.io页面的)或者CNAME记录(即别名记录)
正在 Ping weiyigeek.github.io [185.199.111.153] 具有 32 字节的数据:
来自 185.199.111.153 的回复: 字节=32 时间=149ms TTL=49

#由于我们github pages自定义域名填写的是www.weiyigeek.github.io,所有需要设置weiyigeek.github.io指向前者;
@ CNAME 默认 www.weiyigeek.github.io.
www CNAME 默认 weiyigeek.github.io.

#Step3.验证是否解析成功
$dig www.weiyigeek.github.io +noall +answer
DiG 9.11.3-1ubuntu1.7-Ubuntu www.weiyigeek.github.io +noall +answer
global options: +cmd
www.weiyigeek.github.io. 600 IN CNAME weiyigeek.github.io.
weiyigeek.github.io. 2458 IN A 185.199.111.153
weiyigeek.github.io. 2458 IN A 185.199.109.153
weiyigeek.github.io. 2458 IN A 185.199.110.153
weiyigeek.github.io. 2458 IN A 185.199.108.153

WeiyiGeek.腾讯云域名指向github

WeiyiGeek.腾讯云域名指向github


Gitee Pages
描述:由于Gitee是商业与免费版本一起的,只有付费才能使用git pages的自定义域名指向;但是我们还是有其他办法来解决的;

1
2
#step1.在域名提供商那里设置	显性URL
blog.weiyigeek.github.io -> weiyigeek.gitee.io. #自动跳转

WeiyiGeek.设置完成

WeiyiGeek.设置完成

参考文档:


Github 仓库信息显示

描述:在网页中显示您的github仓库中项目的start/wathc/fork等等数量;
github buttons:https://ghbtns.com/

基础示例:

1
2
3
4
5
6
7
8
9
10
11
#type可选 star / watch / fork /Follow
https://ghbtns.com/github-btn.html?user=weiyigeek&repo=weiyigeek.github.io&type=star&count=true

#Star
<iframe src="https://ghbtns.com/github-btn.html?user=weiyigeek&repo=weiyigeek.github.io&type=star&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe>

#Watch
<iframe src="https://ghbtns.com/github-btn.html?user=weiyigeek&repo=weiyigeek.github.io&type=watch&count=true&v=2" frameborder="0" scrolling="0" width="170px" height="20px"></iframe>

#fork 其他类都一样
<iframe src="https://ghbtns.com/github-btn.html?user=twbs&repo=bootstrap&type=fork&count=true" frameborder="0" scrolling="0" width="170px" height="20px"></iframe>

WeiyiGeek.效果图

WeiyiGeek.效果图


Github 开源项目PR提交

温馨提示:此处实践环境依赖于git工具, 若你没有安装git或者不了解的git进行代码提交过程的朋友,可以参考博主学习【git系列笔记】汇总, 关注 WeiyiGeek 公众号回复【Git学习之路汇总】即可获得学习资料:
https://www.weiyigeek.top/wechat.html?key=Git学习之路汇总

如何在 Github 上给开源项目提交 PR?

Pull Request (俗称PR): 意思是请求主仓库的所有者从你的仓库中拉取代码合并到主仓库中。
在 GitHub 中如果想参与开源项目开发时,通常会采用进行PR提交方式,当项目管理员收到你提交的PR后,他会对你提交的代码进行审(即查看你写的代码,并考虑其中写的好的和写的不好的地方,然后给你提出意见和建议), 当我们我们的代码通过了审查,它就会被合并到主仓库中,这时候我们的一次代码贡献就算是完成啦!

提交 PR 流程简述:
我们在使用开源项目的过程中,发现一个新的需求,但是开源项目不支持,这时我们就可以在开源项目的基础上实现这个需求,向开源项目提交 PR,让开源项目考虑后续版本是否接纳该需求, 提交 PR 是参与开源项目,为开源项目做贡献的起点。
提交 PR 的过程包括:fork 开源项目到自己的 Github 账户下,clone 项目到自己的本地仓库,建立本地仓库到远程仓库的 remote 链接,新建本地分支,修改代码,提交代码到自己的 Github 远程仓库,新建 PR。

提交 PR 详细步骤

描述: 此处我们向 Github上 how-does-MobaXterm-encrypt-password 开源项目 (它是一个解密MobaXterm存储的Session的工具) 提交 PR 为例,进行讲解我的 Github的仓库地址 ( https://github.com/weiyigeek ) 欢迎大家来访哟!

步骤 01.浏览器访问Github上how-does-MobaXterm-encrypt-password开源项目( https://github.com/HyperSine/how-does-MobaXterm-encrypt-password), 点击 Fork 复制项目到自己 Github 仓库之中, 点击确定后稍等片刻,此项目便会出现在自己的仓库中。

WeiyiGeek.Fork开源项目图

WeiyiGeek.Fork开源项目图


步骤 02.下载 Fork 复制到自己 Github 仓库中的该 how-does-MobaXterm-encrypt-password 开源项目, 你可采用 Https 或者 ssh 方式拉取,此处我已经使用ssh公钥进行认证,所以采用SSH方式进行clone项目到本地的 github/opensource/ 目录中 。

1
2
3
4
5
6
7
$ cd github/opensource/
$ git clone git@github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git

$ git config --global --list
user.email=master@weiyigeek.top
user.name=WeiyiGeek
core.quotepath=false


步骤 03.查看项目remote 远程链接以及添加上游仓库连接(开源项目仓库),此处上游指的是一开始 fork 的那个项目源。

1
2
3
4
5
6
7
8
9
10
11
12
$ git remote -v
origin git@github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git (fetch)
origin git@github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git (push)

# 添加上游仓库链接
$ git remote add upstream https://github.com/HyperSine/how-does-MobaXterm-encrypt-password

$ git remote -v
origin git@github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git (fetch)
origin git@github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git (push)
upstream https://github.com/HyperSine/how-does-MobaXterm-encrypt-password.git (fetch)
upstream https://github.com/HyperSine/how-does-MobaXterm-encrypt-password.git (push)


步骤 04.创建本地 dev-pr 分支, 通常测试功能的代码会在测试分支上,当功能成熟后便可Merge到Master分支上(后续会讲解)

1
2
3
# how-does-MobaXterm-encrypt-password (master)
$ git checkout -b dev-pr
Switched to a new branch 'dev-pr'


步骤 05.切换分支后我们便可以开始开源项目代码修改了,然后提交修改的代码到本地分支,推送本地分支到 Github 远程仓库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# how-does-MobaXterm-encrypt-password (dev-pr)
# 1.使用如下命令添加修改的文件到暂存区
$ git add .

# 2.提交本次修改代码文件到工作区,并描述其本次修改简单情况
$ git commit -m "如果在执行python ShowMobaXterm.py weiyigeek 出现如下错误时,请将第 232 与 231 行的 ConnHostname.encode('ansi'), ConnUsername.encode('ansi') 删除, 如果有中文编码,可以将 encode('ansi') => decode(\"utf8\",\"ignore\")"
[dev-pr 4d1c83c] 如果在执行python ShowMobaXterm.py weiyigeek 出现如下错......,可以将 encode('ansi') => decode(utf8,ignore)
1 file changed, 7 insertions(+), 9 deletions(-)

# 3.将当前分支推送到自己的远程仓库。
$ git push origin dev-pr
Enumerating objects: 7, done.
......
To github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git
* [new branch] dev-pr -> dev-pr


步骤 06.在自己的远程仓库便能看刚才push上去的dev-pr分支, 此时点击项目仓库中pull request选项卡,然后再点击 New pull request,,进行创建PR。

WeiyiGeek.New pull request图


步骤 07.当上一步完成后,将显示如下页面,此处需要注意的是 compare 处选择刚才提交上来的dev-pr 分支, 然后点击 Create pull request.

WeiyiGeek.Create pull request图

WeiyiGeek.Create pull request图


步骤 08.填写本次提交PR的标题,以及建议的修改或新增的功能点等,完毕后提交(Create pull request)就 OK 啦。

WeiyiGeek.PR提交描述图

WeiyiGeek.PR提交描述图


步骤 09.提交PR完毕后,我们将会在原开源项目仓库的pull request 查看到我们提交的 PR 代码情况了。

WeiyiGeek.在源项目中查看提交的PR图

WeiyiGeek.在源项目中查看提交的PR图


步骤 10.上述演示在dev-pr分支中进行修改并提交了PR,当PR审核通过或者内部测试无问题时,此时将可以把其合并到 master 分支上,操作如下然后在FORK的项目中可以看到已经合并到主分支了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WeiyiGeek@WeiyiGeek MINGW64 /e/github/opensource/how-does-MobaXterm
-encrypt-password (dev-pr)
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

WeiyiGeek@WeiyiGeek MINGW64 /e/github/opensource/how-does-MobaXterm-encrypt-password (master)
$ git merge dev-pr
Updating 462cd00..4d1c83c
Fast-forward
python3/ShowMobaXterm.py | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)

WeiyiGeek@WeiyiGeek MINGW64 /e/github/opensource/how-does-MobaXterm-encrypt-password (master)
$ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:WeiyiGeek/how-does-MobaXterm-encrypt-password.git
462cd00..4d1c83c master -> master
WeiyiGeek.分支合并图

WeiyiGeek.分支合并图


补充说明: 关于check不通过的问题如何解决?

描述: github 有代码自己编译和 check 机制,在你提交 pr 的时候,项目可能已经有了比较大的变更(每天都有世界各地的 coder 提 pr),而你没有将分支保持与项目同步,所以有可能会导致 check 失败,pr 被无视。
此时我们前面添加的upstream上游地址作用就展现出来了,他可以用于远程代码同步,所以每次提交 pr 前,都要先从做代码同步。

过程如下:

1
2
3
4
5
6
7
8
# 先 fetch 拉取项目最新代码,执行:
git fetch upstream

# 再 rebase 在另一个分支基础之上重新应用,用于把一个分支的修改合并到当前分支,执行:
git rebase upstream/develop

# 再 push develop 上传修改后的代码分支,执行:
git push origin develop

更详细的参与开源项目的开放,建议大家可以参考此篇文章[^pr]

[^pr]: 如何参与开源项目 - 细说 GitHub 上的 PR 全过程: https://mp.weixin.qq.com/s/mY-1mDFvBkyHGBgI9KpGOA