2009年11月26日 星期四

Git 簡記

Standard
在團隊的多人協同作業時,版本控制系統是很重要的工具,除了要將大家的工作成果彙整起來之外,還要確保歷史記錄不遺失,讓日後的追朔工作有跡可尋。早期的 CVS 到後來的 Subversion(SVN) 都是屬於這類的版本控制系統。不過對於堪稱世界上最大最多人協作的 Linux Kernel Project,CVS 與 SVN 顯然像的玩具,根本不敷使用。而其他商業的版本控制系統,也多少有些缺點,這也是為什麼 Linux 之父『 Linus Torvalds 』要下海親自打造一套新的版本控制系統『Git』。既然 Git 能勝任於這世界上最大的專案,說它是下一世代的版本控制系統,應該一點也不為過。

這樣的一個強大的工具,讓很多人都躍躍欲試,但也因為太過強大,網路上長篇大論的文章也讓許多人不敢恭維,有殺雞焉用牛刀之感。回頭想想,若是連如同 CVS/SVN 上的基本功能都無法輕易上手,講再多 Git 的特異功能也是枉然,套句 Torvalds 的經典名句:『full of bullshit』,一切都是廢話和放屁!(筆者真的懂每次都聽到一堆所謂的分散式架構等等優點,但還是不知道要怎麼開始用,是多麼令人覺得自己是 git!亦或者是文件撰寫者是 git?)

從人本考量,我們需要版本控制系統,最初就是要能上傳和提交 source code,使之能放在 Server 上保存。此 Server 可以放在遠端,也可以是自己電腦上,要嘗試架一個在本地端(沒有提供外部連入功能)的 GIT Server 相當容易,裝好相關套件之後,指定一個 Source code 的保存目錄就好:

Server 端的設定:
# 建立一個新目錄,用來放 example project 的程式碼
mkdir example.git
cd example.git
#  初始化此目錄為 Git 儲存庫
git --bare init

到此,Server 的設定已經完成,新的 example project 儲存庫也已經建立,若是有需要,日後也可以加上 SSH/HTTP 等連線支援,讓外部使用者可以遠端存取此 Git server。

有了 Server 之後,通常真正在做開發工作的,是在客戶端(Client),我們通常會從 Server 上取得一份完整的副本程式碼回家修改,完成工作後再提交回 Git server。在提交之前我們必需先設定自己的一些資料,以便他人知道是誰提交了程式碼。

Client 端的設定:
# 設定提交者的姓名和電子郵件信箱
git config --global user.name "Fred Chien"
git config --global user.email "fred@ullab.org"


Client 端的本地工作區建立(從 Server 取回所有程式碼):
# 建立一個乾淨的目錄
mkdir git
cd git
# 初始化並從 Git Server 取回程式碼
git clone /home/fred/example.git

Client 端修改好後提交回 Server:
# 提交所有程式碼修改和加上說明描述
git commit -a -m "說明描述"
# 將所有提交內容上傳至 Git server
git push

Client 端從 Server 下載並更新本地工作區的程式碼:
git pull

Client 端新增文件並提交和上傳至 Server:
git add example.c
git commit -a -m "Add a example.c"
git push

瀏覽所有開發記錄:
git log

後記

一直以來有很多人都來詢問 Git 的用法,網路上的相關文件也似乎都太過『完整』,因此整理了一下筆者過去的私人小筆記,用比較簡單的方式說明如何使用 Git,且避免和省略了許多令初學者摸不著頭緒的部份,如:分散式、離線作業、Branch、Merge 等等。