[TOC]
# 看懂GitHub
https://guides.github.com/
* 成立于2008年 。基于Git,提供协作式代码版本控制服务。
* 总部在旧金山。
![](https://box.kancloud.cn/1db520f844d787405385b4b70d8e2477_219x219.png)
* 名称:**Octocat**(章鱼猫)
Github 在代码托管领域是先行者,现在强力的竞争对手也有不少,包括 [Gitlab](https://about.gitlab.com/)(局域网部署)、[Bitbucket](https://bitbucket.org/)(免费账号不限 private 项目个数)、[Coding](https://coding.net/)(对国内开发者来说可能有墙内优势)。
Github 发明了两个碉堡了的功能,**Fork** 和 **Pull Request**。这两个功能创造了整个 Github 生态系统,使得“基因”得以繁衍和进化,充满了生命力。基因通过 Fork 被复制,而 Pull Request 使得基因得以进化。好的基因会被大量的 Fork,从而实现了优胜劣汰。这一整套体系才是精华所在,说 Github 是代码仓库显然太肤浅了。
以GitHub上最流行的开源项目[bootstrap](https://github.com/twbs/bootstrap/)作为例子界面。
## 别人的GitHub
![](https://box.kancloud.cn/b715a1c98e47f20a927dd01e570747a3_600x412.png)
## Pull Requests
![](https://box.kancloud.cn/e278d6fc2b463940d63f16cc9a5e4e44_1003x327.png)
我尝试用类比的方法来解释一下 **pull reqeust**。
想想我们中学考试,老师改卷的场景吧。
你做的试卷就像仓库,你的试卷肯定会有很多错误,就相当于程序里的 bug。
老师把你的试卷拿过来,相当于先 fork。
在你的卷子上做一些修改批注,相当于 git commit。
最后把改好的试卷给你,相当于发 pull request。
你拿到试卷重新改正错误,相当于 merge。
当你想更正别人仓库里的错误时,要走一个流程:
1. 先点击 fork 仓库,项目现在就在你的账号下了
![](https://box.kancloud.cn/cf0f5f349148d608801ab7ceda76c885_600x154.png)
2. 在你自己的机器上 git clone 这个仓库,切换分支(也可以在 master 下),做一些修改。
~~~
~ git clone https://github.com/beepony/bootstrap.git
~ cd bootstrap
~ git checkout -b test-pr
~ git add . && git commit -m "test-pr"
~ git push origin test-pr
~~~
3. 完成修改之后,回到 test-pr 分支,点击旁边绿色的 Compare & pull request 按钮
![](https://box.kancloud.cn/420703cc0b4c25317104277cc7850d50_600x142.png)
4. 添加一些注释信息,确认提交
![](https://box.kancloud.cn/a6d408826b3ce86691137c85ded44e88_600x468.png)
5. 作者原仓库 review 这个 bug,如果是正确的话,就会 merge 到他自己的项目中至此,
至此,整个 `pull request` 的过程就结束了。
## 用好 github 中的watch、star、fork
如下图所示这是我们经常看到的三个按钮。
![](image/screenshot_1491025787878.png)
watch、star、fork旁边的数字都是可以点击的,就可以查看有哪些人watch、star、fork了这个项目。
### watch
watch翻译过来可以称之为**关注**,点击watch可以看到如下的列表。
![](https://box.kancloud.cn/bef169b853b719dd15edfc693f417852_325x255.png)
默认每一个用户都是处于**Not watching**的状态,当你选择**Watching**,表示你以后会关注这个项目的所有动态,以后只要这个项目发生变动,如被别人提交了pull request、被别人发起了issue等等情况,
你都会在自己的个人通知中心,收到一条通知消息,如果你设置了个人邮箱,那么你的邮箱也可能收到相应的邮件。
如果你不想接受这些通知,那么点击 **Not Watching** 即可。
> 使用场景:
> 对于一些可能会经常发生变化的会不定期更新的好项目。
### star
这里解释为**用星号标记**或者**点赞**更合适,当你点击 **star**,表示你喜欢这个项目或者通俗点,可以把他理解成朋友圈的点赞吧,表示对这个项目的支持。
不过相比朋友圈的点赞,**github 里面会有一个列表,专门收集了你所有 star 过的项目**。
![](https://box.kancloud.cn/627729daf827c3f8b342b59838f5cdce_229x323.png)
github 本身没有提供一个分类功能,但是 github 从来也不缺有思想有执行力的程序员,
有人做了一个 [Chrome 插件](https://chrome.google.com/webstore/detail/github-stars-tagger/aaihhjepepgajmehjdmfkofegfddcabc),这个插件可以对 github 中所有 star 的项目进行分类。这样设置的好处是,以后再次查找项目时,可以根据归类查找。
希望,未来 github 可以自己支持对 star 的 tag 处理。
> 使用场景:
喜欢一个项目就 star 它吧。
### fork
Fork,翻译为“叉”,“副本”。则是把别人项目的远端代码储存库内容复制一份到自己的远端储存库,形容:**「就像是在餐桌上用叉子把盘子上的一块肉叉到自己的盘子上。」**。
![](https://box.kancloud.cn/25ca36f61b4651ade39e3e43d06b6a0c_516x302.png)
> 使用场景:
修改开源项目就使用fork,这样你就可以在原项目的基础上,对项目进行修改提交,现在你是这个项目的主人啦~
## Projects 项目管理工具
![](https://box.kancloud.cn/a4f6b0681c3fa69a176ecc585f761453_1002x455.png)
### 介绍
GitHub新推出的项目管理工具Projects,协助开发者在开发流程中整合项目管理,让开发者可以直接在GitHub程序代码储存库中管理工作流程,而Projects的介面就像看板系统,能够图像化开发流程,用户可以根据团队使用需求建立工作流程架构,如“开发中”、“已完成”、“尚未开始进行”等,且能通过拖拉的方式,来调整工作流程栏位的顺序。
![Projects](https://box.kancloud.cn/c8b2e43e0c93c7b5f7615c3cf32c90e0_1430x794.gif)
除了Projects工具外,GitHub还优化了GitHub的程序代码检查工具Reviews,加强软件开发团队的协作能力,允许其他开发者能检查自己的程序代码,并能在特定行数的程序代码提出意见回馈,且用户能编辑、修改或汇整意见后,再提交意见回馈。
![Reviews from GitHub](https://box.kancloud.cn/d8c925d826627ee3b1ea864daac2f1bb_1360x766.gif)
### 作用
1. 拖放,组织工作
在看板式板上拖放卡,组织您的工作,并与队友计划项目。
2. 跟踪问题,请求和注释
创建Notes以快速添加任务或提醒您的项目。当您准备好时,它们可以转换为问题。
## Issue
http://www.jianshu.com/p/5ba1e7f5ad70
https://www.zhihu.com/question/22969033/answer/25927363
https://github.com/ShannonChenCHN/eureka/issues/4
有几个小技巧也非常的能提高工作效率。
第一个,快速引用。Issue 这里是没有 reply 按钮的,如果你想回答具体某个问题,可以用鼠标选中那段话,然后,敲 r 。 这样这段话就自动出现在你的评论框中了。
第二个,拉别人进来讨论。如果你在评论框中输入 `@happypeter` 那么不管我是不是你当然项目的参与者,我都会收到通知来进来参加讨论。实际中发现这个用的是非常的多。
第三个,用版本留言关闭 Issue。如果有人给我的项目提了个 Bug,在一个编号为 20 的 Issue (后面简写为 Issue#20) 里。那我写几行代码修复这个 Bug 之后,在客户端作版本时,只要在版本留言里面写 `fix #20` 这样的字样,这个版本同步到 Github 上之后,这个 Issue#20 就自动关闭了。
第四个,如果我在当前 Issue#10 的评论框中写 `#20` 就可以自动链接到 Issue#20 了。同时 Issue#20 那边也会显示出 Issue#10 。这种指向和关联的功能在实用中是非常重要的。
另外,Issue 上也可以添加标签,设置 milestone,并且把任务布置给一个特定的开发者。
## Github的其他功能
### github快捷键:
在Github中,很多页面都可以使用键盘快捷键,让github更加便捷:
在各个页面下按下**?**(`shift+/`)都可以打开键盘快捷键一览表,很贴心有木有。
### diff时忽略空格
有些修改只是增减了空格,在URL中添加?w=1就可以忽略。
### 查看某个作者的提交历史
在URL中添加?author=username,例如:https://github.com/rails/rails/commits/master?author=dhh
### 比较版本
比较版本使用类似如下的URL比较分支:https://github.com/rails/rails/compare/master...4-1-stable
同样可以使用一下格式:https://github.com/rails/rails/compare/master@{1.day.ago}...master https://github.com/rails/rails/compare/master@{2014-10-04}...master
如果想和派生仓库比较,加上派生仓库名作前缀即可:https://github.com/rails/rails/compare/byroot:master...master
### Gists
GitHub 推出的基于 Git 的代码片段服务。Gists页面提供JavaScript代码,可以将 Gist
嵌入到其他站点。但是很多站点粘贴 JavaScript 无效,这时候你可以在 Gist URL 后附加.pibb,得到一个纯 HTML
的版本,然后就可以复制粘贴 HTML 源码到其他网站了。例如:https://gist.github.com/tiimgreen/10545817.pibb
### 快速引用
你可以选中别人的评论文字,然后按r,这些内容会以引用的形式被复制在文本框中:
### 任务列表
任务列表在工单或合并请求中,你可以使用任务列表语法:
```
- [ ] Be awesome
- [ ] Do stuff
- [ ] Sleep
```
勾选之后,会更新 Markdown:
```
- [x] Be awesome
- [x] Do stuff
- [ ] Sleep
```
## 删除 GitHub 的仓库 repository
知道了在Github上如何创建仓库,可能还有很多人不知道如何去删除一个仓库,Github上删除仓库也是很容易的,就是有点难找,点击该仓库右边的**setting**,然后最下面有删除按钮。
![](https://box.kancloud.cn/dbd629a005cd1934e91e3c8662719784_705x75.png)
一旦你删除了一个仓库,就没有回头路了。请再三考虑。
![](https://box.kancloud.cn/20413f378ecca6c44b393722c38d965e_732x82.png)
# 其他资源
[Git 和 Github 秘籍](https://github.com/tiimgreen/github-cheat-sheet/),灵感来自于 Zach Holman 在 2012 年 Aloha Ruby Conference 和 2013 年 WDCNZ 上所做的演讲:Git and GitHub Secrets(slides) 和 More Git and GitHub Secrets(slides)。
# 辅助工具
> [5 分钟 GET 我使用 Github 5 年总结的这些骚操作!](https://juejin.im/post/6893011812258676744)
[allcontributors](https://allcontributors.org/)
## GitHub 项目徽标
GitHub 徽标官网是[shields.io/](https://shields.io/)
格式:
```
https://img.shields.io/badge/{徽标标题}-{徽标内容}-{徽标颜色}.svg?{参数名1}={参数值1}&{参数名2}={参数值2}
```
## 图标
[https://octicons.github.com/](https://octicons.github.com/)
[https://octodex.github.com/](https://octodex.github.com/)
[https://icongr.am/](https://icongr.am/)
[http://vsmarketplacebadge.apphb.com/](http://vsmarketplacebadge.apphb.com/)
## GitHub Readme Stats
[github-readme-stats](https://github.com/anuraghazra/github-readme-stats)
在你的 README 中获取动态生成的 GitHub 统计信息!
- 介绍
- 1. Get Git - 安装并且设置Git
- 2. Repository - 建立一个本地的repository
- 3. Commit to it - 检查状态、新增或修改commits
- 4. GitHubbin - 注册GitHub帐号
- 5. Remote Control - 将repository做本地和远程的连接
- 6. Forks and Clones - Fork和clone一个开源的计划
- 7. Branches aren't just for Birds - 建立一个feature branch
- Git分支开发模型
- 8. It's a Small World - 邀请并和别人合作
- 9. Pull, Never Out of Date - 利用Push和pull来和GitHub.com同步
- 10. Requesting You Pull Please - 建立一个pull request
- 11. Merge Tada - Merge和删除branches
- 学会 GitHub
- GitHub 使用指南
- git 与 github 模板配置
- GitHub Actions
- 实用技巧
- Git Flow
- Submodule子模块
- 工作记录
- 常用命令
- 帮助
- 资源
- 解疑答惑