GitHub是一個聚集了數百萬開發者的網站,他們每天都在一起合作共同開發開源軟體。GitHub同時也是給軟體使用者報告問題的地方,它托管了數十億行程式碼。作為一個開發者,你應該了解GitHub中最重要的一些功能。

GitHub介紹

GitHub是一個網站,每天都有數百萬名開發者在這裡合作共同開發開源軟體。它也是軟體使用者報告問題的地方,同時也是托管數十億行程式碼的地方。

簡而言之,GitHub是一個為開發者打造的平台,並且是基於Git的。

提示:如果你對Git還不熟悉,可以查看這個Git指南

作為一個開發者,你每天都無法避免使用GitHub,無論是為了托管你的程式碼還是使用別人的程式碼。本文將介紹GitHub的一些重要概念,以及如何使用一些提升你工作流程的功能,以及如何將其他應用程式整合到你的開發過程中。

為什麼使用GitHub?

現在你已經知道GitHub是什麼,你可能會問你應該為什麼要使用它。

畢竟,GitHub是由一家私人公司管理的,他們從托管別人的程式碼中獲獎利潤。那你為什麼要使用GitHub,而不是類似的平台,如BitBucket或GitLab?

除了個人喜好和技術原因外,有一個重要的原因:每個人都在使用GitHub,所以它的社群效應非常巨大。

大型程式碼庫過去已經從其他版本控制系統遷移到Git,因為Git在使用上非常方便,而GitHub在Open Source社群中一直處於很好的地位(並且付出了很多努力)。

所以今天,無論你查找任何庫,你99%的機會在GitHub上找到它。

除了Open Source程式碼外,很多開發者也會因為使用GitHub上的獨特功能而在上面託管私有庫。

GitHub問題

GitHub問題是全球最受歡迎的錯誤追蹤工具之一。

它提供了一個使庫的所有者可以組織、標記和分配給里程碑的問題的功能。

如果你在由其他人維護的項目上報告問題,它會保持開放,直到你關閉它(例如,如果你找到了問題)或項目所有者關閉它。

有時你會得到結論性答案,其他時候問題會保持開放,並且會被標記一些資訊以對其進行分類。開發者可能會根據您的反饋修復問題或改進程式碼庫。

大多數開發者並不為他們在GitHub上釋出的程式碼提供支援,所以你不能指望獲得及時的回覆。但有時候開源庫是由提供相關服務的公司發布的,這些公司可能對該程式碼提供相關服務,或提供具有更多功能的商業版本,或者有一個插件架構,它們可以作為有償的開發人員工作在開源軟體上。

社交式程式碼開發

幾年前,GitHub的標誌中包含了「社交式程式碼開發」的標語。

這表示什麼,現在是否仍然相關?當然是相關的。

關注

在GitHub上你可以關注開發者,只需要進入他們的個人資料並點擊「關注」按鈕。

你也可以關注一個庫,只需要點擊庫的「關注」按鈕。

無論哪種情況,這些活動都會顯示在你的主頁上。這裡的「關注」不像Twitter上的「關注」,在這裡你可以看到人們在GitHub上做了哪些事情。

星標

GitHub最重要的功能之一是將庫加入星標。這個動作將庫加入到你的「已加星標庫」列表中,使你可以在以後找到你之前感興趣的項目。這也是其中一種最重要的評級機制,因為一個庫獲得的星星數越多,它就越重要,並且會在搜索結果中更常出現。

重要的項目有時可能會有超過7萬的星標。

GitHub還有一個trending頁面,它會顯示在一段時間內獲得最多星標的庫,例如今天、本週或本月。

進入這些熱門列表會產生其他的社交效應,比如被其他網站推薦,因為你有更多的曝光機會。

衍生

一個項目的最後重要的社交指標是fork的次數。

這也是GitHub的關鍵功能之一,因為衍生(fork)是提交合併請求(PR)的基礎,也是一個變更建議。一個人基於你的庫進行衍生,做出一些變更,然後創建一個合併請求來請求你合併這些變更。

有時候衍生的人永遠不會請求合併任何東西,只是因為他們喜歡你的程式碼,決定在它的基礎上添加一些內容,或者解決了他們遇到的某個 bug。

衍生只是將GitHub項目的文件克隆下來,不會包含原始項目的星標和問題。

熱門=更好

總的來說,這些都是項目受歡迎程度的關鍵指標,通常還與最後提交的日期、作者在問題追蹤器中的參與度一起使用,這些都是評估你是否可以依賴一個庫或軟體的有用指標。

合併請求

在介紹**什麼是合併請求(PR)**之前,我們先來看看是如何進行的。

通常,一個人會基於你的庫進行衍生(fork),做出一些變更,然後創建一個合併請求(PR)來請求你合併這些變更。

一個項目可能會有數百個合併請求,一般而言,一個項目越受歡迎,合併請求越多,就像React項目一樣:

React合併請求

一旦一個人提交了一個合併請求,使用GitHub界面很容易,該合併請求需要項目的核心維護者進行審查。

根據你的合併請求的範圍(變更數量、受到變更影響的事物數量、觸及的程式碼的複雜度)維護者可能需要多一點或少一點的時間來確保你的變更與該項目兼容。

一個項目可能會有明確的時間表,他們希望推出一些新的更改。當你在PR中說明了一個復雜的架構時,維護者可能希望保持事情簡單。

這可能意味著不是所有的合併請求都會被迅速接受,也不能保證合併請求會被接受

就像我在上面發布的例子中,有一個在該庫中已經有一年半的合併請求。這在所有的項目中都會發生。

專案管理

除了問題跟蹤,GitHub界面還提供了其他旨在幫助專案管理的功能。

其中之一是項目(Project)。這在生態系統中非常新,並且使用非常罕見,但它是一個看板工具,有助於組織問題和待完成的工作。

維基(Wiki)旨在用於用戶文檔。到目前為止,我看到的使用Wiki最令人印象深刻的是Go Programming Language GitHub Wiki

另一個常見的專案管理輔助工具是里程碑(milestones)。在問題頁面的一部分,你可以將問題分配給特定的里程碑,這些里程碑可以是發佈目標。

談到發佈,GitHub通過引入版本(releases)來增強了Git tag的功能。

Git tag是指向特定提交的指針,如果一致地使用,可以幫助您在不引用具體提交的情況下回滾到先前的版本。

GitHub release是在Git tag的基礎上建立的,表示完整的代碼發佈,包括zip檔案、發佈說明和可能代表您代碼最終產品的二進位資產。

Git tag可以通過程序(例如使用命令行的git程序)創建,而創建GitHub release則是通過GitHub界面的手動過程。你只需告訴GitHub創建一個新的發佈,告訴他們要將該發佈應用到哪個tag。

比較提交

GitHub提供了許多用於處理程式碼的工具。

你可能最想做的一件事之一就是將一個分支與另一個分支進行比較,或者將最新的提交與你目前使用的版本進行比較,以查看隨時間的變更。

GitHub使你可以通過**比較視圖(compare view)**來執行此操作,只需將 /compare 加入到庫的名稱中,例如:https://github.com/facebook/react/compare

例如,我選擇比較最新的 React v15.x 版本與撰寫本文時最新的 v16.0.0-rc 版本,以檢查有哪些變更:

比較視圖

例如,我選擇比較最新的 React v15.x 版本與撰寫本文時最新的 v16.0.0-rc 版本,以檢查有哪些變更:

比較React版本

此視圖顯示了兩個發佈(或標籤或提交引用)之間進行的提交,以及實際的差異,如果變更的數量低於一個合理的數量。

Webhooks和服務

GitHub提供了許多幫助開發者工作流程的功能。其中之一是webhooks,另一個是服務。

Webhooks

Webhooks允許在某些事件發生時,如代碼推送、衍生項目、創建或刪除標籤時,傳送POST請求到指定的URL。

當事件發生時,GitHub會向我們指定的URL發送POST請求。

這種功能的一個常見用途是在我們從本地電腦上推送更新到GitHub時,通知一個遠程伺服器從GitHub中獲取最新的程式碼。我們推送到GitHub上,GitHub告訴伺服器我們推送了更新,伺服器從GitHub上拉取更新。

服務

GitHub的服務以及全新的GitHub應用程式,都是第三方整合,可以改善開發者的體驗或為您提供服務。

例如,您可以設置測試運行器,以便在每次推送些新的提交時自動運行測試,使用TravisCI

您可以使用CircleCI設置持續整合。

您可以創建一個Codeclimate整合,分析程式碼並提供技術債和測試覆蓋率報告。

最後一句

GitHub是一個令人驚嘆的工具和服務,今天開發者工具的一個重要組成部分。本教程將幫助您開始,但在GitHub上進行開源(或閉源)項目的工作實際體驗是不容錯過的。