如果不想經歷自己架設 Git 伺服器的麻煩,網路上有幾個專業的倉庫託管服務可供選擇。這樣做有幾大優點:託管帳戶的建立通常比較省時,方便專案的啟動,而且不涉及伺服器的維護和監控。即使內部創建並運行著自己的伺服器,同時為開源項目提供一個公共託管網站還是有好處的 — 讓開源社區更方便地找到該專案,並給予幫助。
目前,可供選擇的託管服務數量繁多,各有利弊。在 Git 官方 wiki 上的 Githosting 頁面有一個最新的託管服務清單:
https://git.wiki.kernel.org/index.php/GitHosting
由於本書無法全部一一介紹,而本人(譯注:指本書作者 Scott Chacon。)剛好在其中一家公司工作,所以接下來我們將會介紹如何在 GitHub 上建立新帳戶並啟動專案。至於其他託管服務大體也是這麼一個過程,基本的想法都是差不多的。
GitHub 是目前為止最大的開源 Git 託管服務,並且還是少數同時提供公共代碼和私有代碼託管服務的網站之一,所以你可以在上面同時保存開源和商業代碼。事實上,本書就是放在 GitHub 上合作編著的。(譯注:本書的翻譯也是放在 GitHub 上廣泛協作的。)
GitHub 和大多數的代碼託管網站在處理專案命名空間的方式上略有不同。GitHub 的設計更側重於用戶,而不是完全基於專案。也就是說,如果我在 GitHub 上託管一個名為 grit
的項目的話,它的位址不會是 github.com/grit
,而是按在用戶底下 github.com/shacon/grit
(譯注:本書作者 Scott Chacon 在 GitHub 上的用戶名是 shacon
。)。不存在所謂某個項目的官方版本,所以假如第一作者放棄了某個項目,它可以無縫轉移到其它用戶的名下。
GitHub 同時也是一個向使用私有倉庫的用戶收取費用的商業公司,但任何人都可以方便快捷地申請到一個免費帳戶,並在上面託管數量不限的開源項目。接下來我們快速介紹一下 GitHub 的基本使用。
首先註冊一個免費帳戶。訪問 Pricing and Signup 頁面 http://github.com/plans
並點擊 Free acount 裡的 Sign Up 按鈕(見圖 4-2),進入註冊頁面。
圖 4-2. GitHub 服務簡介頁面
選擇一個系統中尚未使用的用戶名,提供一個與之相關聯的電郵位址,並輸入密碼(見圖 4-3):
圖 4-3. GitHub 用戶註冊表單
如果方便,現在就可以提供你的 SSH 公開金鑰。我們在前文的"小型安裝" 一節介紹過生成新公開金鑰的方法。把新生成的公開金鑰複製粘貼到 SSH Public Key 文字方塊中即可。要是對生成公開金鑰的步驟不太清楚,也可以點擊 "explain ssh keys" 連結,會顯示各個主流作業系統上完成該步驟的介紹。 點擊 "I agree,sign me up" 按鈕完成使用者註冊,並轉到該使用者的 dashboard 頁面(見圖 4-4):
圖 4-4. GitHub 的用戶面板
接下來就可以建立新倉庫了。
點擊用戶面板上倉庫旁邊的 "create a new one" 連結,顯示 Create a New Repository 的表單(見圖 4-5):
圖 4-5. 在 GitHub 上建立新倉庫
當然,項目名稱是必不可少的,此外也可以適當描述一下專案的情況或者給出官方網站的位址。然後點擊 "Create Repository" 按鈕,新倉庫就建立起來了(見圖 4-6):
圖 4-6. GitHub 上各個專案的概要資訊
由於尚未提交代碼,點擊專案位址後 GitHub 會顯示一個簡要的指南,告訴你如何新建一個專案並推送上來,如何從現有項目推送,以及如何從一個公共的 Subversion 倉庫導入項目(見圖 4-7):
圖 4-7. 新倉庫指南
該指南和本書前文介紹的類似,對於新的專案,需要先在本地初始化為 Git 專案,添加要管理的檔並作首次提交:
$ git init
$ git add .
$ git commit -m 'initial commit'
然後在這個本地倉庫內把 GitHub 添加為遠端倉庫,並推送 master 分支上來:
$ git remote add origin git@github.com:testinguser/iphone_project.git
$ git push origin master
現在該項目就託管在 GitHub 上了。你可以把它的 URL 分享給每位對此項目感興趣的人。本例的 URL 是 http://github.com/testinguser/iphone_project
。而在專案頁面的摘要部分,你會發現有兩個 Git URL 位址(見圖 4-8):
圖 4-8. 項目摘要中的公共 URL 和私有 URL
Public Clone URL 是一個公開的,唯讀的 Git URL,任何人都可以通過它克隆該專案。可以隨意散播這個 URL,比如發佈到個人網站之類的地方等等。
Your Clone URL 是一個基於 SSH 協議的可讀可寫 URL,只有使用與上傳的 SSH 公開金鑰對應的金鑰來連接時,才能通過它進行讀寫操作。其他使用者訪問該專案頁面時只能看到之前那個公共的 URL,看不到這個私有的 URL。
如果想把某個公共 Subversion 項目導入 Git,GitHub 可以幫忙。在指南的最後有一個指嚮導入 Subversion 頁面的連結。點擊它會看到一個表單,包含有關導入流程的資訊以及一個用來粘貼公共 Subversion 項目連接的文字方塊(見圖 4-9):
圖 4-9. Subversion 導入介面
如果專案很大,採用非標準結構,或者是私有的,那就無法借助該工具實現導入。到第 7 章,我們會介紹如何手工導入複雜工程的具體方法。
現在把團隊裡的其他人也加進來。如果 John,Josie 和 Jessica 都在 GitHub 註冊了帳戶,要賦予他們對該倉庫的推送許可權,可以把他們加為專案協作者。這樣他們就可以通過各自的公開金鑰訪問我的這個倉庫了。
點擊專案頁面上方的 "edit" 按鈕或者頂部的 Admin 標籤,進入該專案的管理頁面(見圖 4-10):
圖 4-10. GitHub 的專案管理頁面
為了給另一個用戶添加項目的寫許可權,點擊 "Add another collaborator" 連結,出現一個用於輸入用戶名的表單。在輸入的同時,它會自動跳出一個符合條件的候選名單。找到正確用戶名之後,點 Add 按鈕,把該使用者設為專案協作者(見圖 4-11):
圖 4-11. 為專案添加協作者
添加完協作者之後,就可以在 Repository Collaborators 區域看到他們的名單(見圖 4-12):
圖 4-12. 專案協作者名單
如果要取消某人的訪問權,點擊 "revoke" 即可取消他的推送許可權。對於將來的專案,你可以從現有專案複製協作者名單,或者直接借用協作者群組。
在推送或從 Subversion 導入項目之後,你會看到一個類似圖 4-13 的項目主頁:
圖 4-13. GitHub 上的項目主頁
別人訪問你的專案時看到的就是這個頁面。它有若干導航標籤,Commits 標籤用於顯示提交歷史,最新的提交位於最上方,這和 git log
命令的輸出類似。Network 標籤展示所有派生了該專案並做出貢獻的用戶的關係圖譜。Downloads 標籤允許你上傳項目的二進位檔案,提供下載該項目各個版本的 tar/zip 包。Wiki 標籤提供了一個用於撰寫文檔或其他專案相關資訊的 wiki 網站。Graphs 標籤包含了一些視覺化的專案資訊與資料。預設打開的 Source 標籤頁面,則列出了該專案的目錄結構和概要資訊,並在下方自動展示 README 檔的內容(如果該檔存在的話),此外還會顯示最近一次提交的相關資訊。
如果要為一個自己沒有推送許可權的項目貢獻代碼,GitHub 鼓勵使用派生(fork)。到那個感興趣的項目主頁上,點擊頁面上方的 "fork" 按鈕,GitHub 就會為你複製一份該項目的副本到你的倉庫中,這樣你就可以向自己的這個副本推送資料了。
採取這種辦法的好處是,專案擁有者不必忙於應付賦予他人推送許可權的工作。隨便誰都可以通過派生得到一個專案副本並在其中展開工作,事後只需要專案維護者將這些副本倉庫加為遠端倉庫,然後提取更新合併即可。
要派生一個專案,到原始專案的頁面(本例中是 mojombo/chronic)點擊 "fork" 按鈕(見圖 4-14):
圖 4-14. 點擊 "fork" 按鈕獲得任意專案的可寫副本
幾秒鐘之後,你將進入新建的專案頁面,會顯示該專案派生自哪一個項目(見圖 4-15):
圖 4-15. 派生後得到的項目副本
關於 GitHub 就先介紹這麼多,能夠快速達成這些事情非常重要(譯注:門檻的降低和完成基本任務的簡單高效,對於推動開源專案的協作發展有著舉足輕重的意義。)。短短幾分鐘內,你就能創建一個新帳戶,添加一個專案並開始推送。如果專案是開源的,整個龐大的開發者社區都可以立即訪問它,提供各式各樣的幫助和貢獻。最起碼,這也是一種 Git 新手立即體驗嘗試 Git 的捷徑。