[TOC]
# 看懂GitHub
https://guides.github.com/
* 成立于2008年 。基于Git,提供協作式代碼版本控制服務。
* 總部在舊金山。

* 名稱:**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

## Pull Requests

我嘗試用類比的方法來解釋一下 **pull reqeust**。
想想我們中學考試,老師改卷的場景吧。
你做的試卷就像倉庫,你的試卷肯定會有很多錯誤,就相當于程序里的 bug。
老師把你的試卷拿過來,相當于先 fork。
在你的卷子上做一些修改批注,相當于 git commit。
最后把改好的試卷給你,相當于發 pull request。
你拿到試卷重新改正錯誤,相當于 merge。
當你想更正別人倉庫里的錯誤時,要走一個流程:
1. 先點擊 fork 倉庫,項目現在就在你的賬號下了

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 按鈕

4. 添加一些注釋信息,確認提交

5. 作者原倉庫 review 這個 bug,如果是正確的話,就會 merge 到他自己的項目中至此,
至此,整個 `pull request` 的過程就結束了。
## 用好 github 中的watch、star、fork
如下圖所示這是我們經常看到的三個按鈕。

watch、star、fork旁邊的數字都是可以點擊的,就可以查看有哪些人watch、star、fork了這個項目。
### watch
watch翻譯過來可以稱之為**關注**,點擊watch可以看到如下的列表。

默認每一個用戶都是處于**Not watching**的狀態,當你選擇**Watching**,表示你以后會關注這個項目的所有動態,以后只要這個項目發生變動,如被別人提交了pull request、被別人發起了issue等等情況,
你都會在自己的個人通知中心,收到一條通知消息,如果你設置了個人郵箱,那么你的郵箱也可能收到相應的郵件。
如果你不想接受這些通知,那么點擊 **Not Watching** 即可。
> 使用場景:
> 對于一些可能會經常發生變化的會不定期更新的好項目。
### star
這里解釋為**用星號標記**或者**點贊**更合適,當你點擊 **star**,表示你喜歡這個項目或者通俗點,可以把他理解成朋友圈的點贊吧,表示對這個項目的支持。
不過相比朋友圈的點贊,**github 里面會有一個列表,專門收集了你所有 star 過的項目**。

github 本身沒有提供一個分類功能,但是 github 從來也不缺有思想有執行力的程序員,
有人做了一個 [Chrome 插件](https://chrome.google.com/webstore/detail/github-stars-tagger/aaihhjepepgajmehjdmfkofegfddcabc),這個插件可以對 github 中所有 star 的項目進行分類。這樣設置的好處是,以后再次查找項目時,可以根據歸類查找。
希望,未來 github 可以自己支持對 star 的 tag 處理。
> 使用場景:
喜歡一個項目就 star 它吧。
### fork
Fork,翻譯為“叉”,“副本”。則是把別人項目的遠端代碼儲存庫內容復制一份到自己的遠端儲存庫,形容:**「就像是在餐桌上用叉子把盤子上的一塊肉叉到自己的盤子上。」**。

> 使用場景:
修改開源項目就使用fork,這樣你就可以在原項目的基礎上,對項目進行修改提交,現在你是這個項目的主人啦~
## Projects 項目管理工具

### 介紹
GitHub新推出的項目管理工具Projects,協助開發者在開發流程中整合項目管理,讓開發者可以直接在GitHub程序代碼儲存庫中管理工作流程,而Projects的介面就像看板系統,能夠圖像化開發流程,用戶可以根據團隊使用需求建立工作流程架構,如“開發中”、“已完成”、“尚未開始進行”等,且能通過拖拉的方式,來調整工作流程欄位的順序。

除了Projects工具外,GitHub還優化了GitHub的程序代碼檢查工具Reviews,加強軟件開發團隊的協作能力,允許其他開發者能檢查自己的程序代碼,并能在特定行數的程序代碼提出意見回饋,且用戶能編輯、修改或匯整意見后,再提交意見回饋。

### 作用
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**,然后最下面有刪除按鈕。

一旦你刪除了一個倉庫,就沒有回頭路了。請再三考慮。

# 其他資源
[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子模塊
- 工作記錄
- 常用命令
- 幫助
- 資源
- 解疑答惑