我雖然也是剛摸,使用的是 GitHub 官網所出的 Windows 版,很適合對 Linux 不熟習的
我把我所讀的資料,消耗完所做出的結論,如有不對請糾正
GitHub 是 基於 Git 分散式版本控制系統的共享虛擬主機服務,由開發者 Chris Wanstrath、PJ Hyett 和 Tom Preston-Werner 使用 Ruby on Rails 編寫而成。
甚麼是 版本控制(Revision control) ??
是維護工程藍圖的標準做法,也是一種軟體工程的技巧。隨著軟體開發流程不斷的演變,就可能伴隨著
- 檔案被別人或自己覆蓋,甚至遺失
- 想復原前幾天寫的版本
- 想知道跟昨天寫的差在哪裡
- 是誰改了這段程式碼,為什麼
- 軟體發行,需要分成維護版跟開發版
一個標準的版本控制系統(Version Control System),通常有以下功能
- 建立 Repository (儲存庫),用來保存程式碼
- 方便散佈程式給團隊,有效率協同開發
- 記錄誰改變什麼、在什麼時候、因為什麼原因
- Branch(分支),可因不同情境分開開發
- Tag(標籤) 重要里程碑,以便參照
版本控制系統有哪些?
CSV算是古董級的版本控制系統,主要用於open source的開發,特色是可以多人共同使用,缺點是如果多人要存取同個檔案,要先將檔案鎖起來,很多時候會鎖了忘了開,造成別人無法使用,雖然已經至古 董了,但是因為很多大型的開源專案還在使用這系統,所以現在多少還看見有人使用,但不建議一般用途使用。
Subversion
Subversion簡稱svn,約十年前出現,是CVS的繼承者,主要是改進CVS的缺點,像是最重要的改進,就是檔案鎖定的問題,SVN以試著自動合併檔案的方式來解決同時有兩人修改同一個檔案的問題,現今很多開源專案也還在使用SVN 。
Git & Mercurial
接著時間來到了現代,分散式版本控制系統成為了新興專案的主流,在這些新的系統中,檔案庫不在是集中式的,而是分散式的,原本commit都要集中送到中 央檔案庫,現在不同的檔案庫之間可以互相傳送對方沒有的commit,如此一來讓開發更加容易,即使沒有網路也可以在本地端commit之後再送給遠端的 檔案庫,除此之外,它們引入的新特性也讓合併兩個分支之類的事變得更加容易,個人推薦如果你還沒有用過版本控制系統,可以直接學這些現代的工具,以前的工 具大多都已經很少人在使用,可用的資源也在變少中。
而 GitHub 的特色
- 可以 watch 你所關注的專案,Github 提供 private RSS 訂閱。有了這個功能,我有用到的 plugins 的進度我都可以掌握。
- 你可以 follow 你所關注的開發者動態。
- 可以看到哪個專案最多人 watch。
- 你可以對專案 fork 出自己的版本進行開發,甚至最後發 pull request 要求 merge。
- 根據 fork 我就可以看到這個專案的分支 Network 狀態。有時候可能本來的程式不好用或爛掉了,你就可以查看看有沒有人寫做 patch 改進。
- 漂亮的 Source code browser,並可以針對 commit 來做留言討論,甚至標明是 source code 的哪一行(請把滑鼠移到原始碼的行數旁)。
- 針對 Repository 可以搜尋 code, commit message, author 等。
- GitHub 可以直接當做 Ruby gem server。