前言
對於周圍很多研究程式設計的人不會使用版本控制系統(Version Control System)這點很無言,所以寫這篇教學。本篇教學的主要觀眾是沒用過版本控制系統或是沒用過git的Windows使用者。如果這篇的回應良好,我下次再補上Linux上CLI介面的git指令使用入門教學。
首先,為什麼要用版本控制系統?版本控制系統有以下重要的功用:
記錄所有的原始碼更改過程並作備份檢視原始碼的修改曆史或複原舊的版本與人協力時可以有效率地同步修改的內容使用分支(Branch)來同時維護多個程式版本
這些功用帶來的好處非常多,其中包含:
不用擔心修改的東西會搞砸一個程式不需要手動備份各個版本不需要在原始碼裡使用注釋(Comment)來保留沒用到的文法在團隊中與人分享原始碼的時候不需要zip來zip去,然後e-mail來e-mail去 (備忘1)
因為這些優點,專業的程式開發人員沒有不用版本控制系統的。所以,麻煩還不會使用版本控制系統的花點時間學習一下。
*備忘1:沒錯,我對於這點非常無言。這篇教學貼出去以後,我會考慮拒收zip起來的原始碼。
git簡介
git是由著名Linux核心(Kernel) 開發人員Linus Torvalds為了便利維護Linux而開發的。git有以下幾項特色:
屬於分散式版本控制系統(Distributed Version Control System)速度非常快,而且在傳輸檔案時使用gzip來減小檔案大小有非常多指令可以使用,甚至能與非git系統的版本控制系統互連
細談這些特色就屬於中階git教學的內容了,簡介方面我先就此打住。
GitHub簡介
GitHub是個提供線上git空間的平台,能讓多名開發人員很方便地進行協力軟體開發。提供的方案包含免費和付費的帳號,而其中的差異在於能否使用私人空間。雖然免費的帳號只能使用公開的空間並且需要公布所有原始碼,但對許多項目來說不是個問題。除此之外,免費的帳號沒有其他限制。
使用GitHub的優點包含:
擁有線上原始碼和修改曆史瀏覽,能讓開發人員便利地分享原始碼有人創立分支(Fork)時能夠追蹤所有的分支越來越多的知名企業在徵才時會要求申請者提供GitHub帳號,以用來觀察在開源軟體社群中的參與,還有程式寫作風格和技巧等等 (備忘2)
所以,要參與開源軟體開發或只是要單純備份/集中整理自己的原始碼時,GitHub是個非常好的平台。
*備忘2:不過如果你的GitHub帳號上的東西太空洞或潦草的話,還是不要給僱主知道,免得扣分。我也因此拒絕過一些有提供GitHub帳號但是沒有什麼內容的求職者。
TortoiseGit
雖然說要用git指令才能完整地體驗git的強大功能,TortoiseGit對於指令介面感到陌生的人可能會比較友善,也能夠在功能和易用性上有個好的平衡。
TortoiseGit可到此下載: http://code.google.com/p/tortoisegit/downloads/list。根據系統的類型,選擇下載64bit或是32bit的版本;下載好以後安裝然後重開機。
重開好後,安裝msysgit: http://code.google.com/p/msysgit/downloads/list。下載Full installer for official Git 1.7.6,或是更新的版本。裝了這個以後TortoiseGit才能正常使用。
建立git項目(Init)並且儲存修改(Commit)
首先,在一個已存在的項目資料夾,或是一個新的資料夾,點右鍵並選擇Git Create repository here…。這會建立一個新的git資料庫,
以便儲存原始碼資料。出現Git Init的對話方塊時,不要勾Make it Bare,並點OK。好了以後,如果有開啓顯示隱藏檔案,便可以看到一個.git的隱藏資料夾。
建立好git資料庫以後,要設定作者資訊。在同個資料夾內按右鍵,並選擇TortoiseGit -> Settings。到Git -> Config頁面,在Name輸入你的名字,在Email輸入你的E-mail。好了以後按OK 關閉。
有原始碼可以儲存以後,在資料夾內按右鍵,並選擇Git Commit -> "master"。master指的是當前的分支;如果本篇教學有續集的話,我會再作解釋。
出現Commit視窗時,在Message中輸入要儲存變更的注釋。好的開發人員通常會在此大致敘述此次修改有新增或異動的內容。輸入訊息後,勾取要儲存的檔案。要儲存所有檔案中的變更,勾Select / Deselect All。好了以後,點OK即可。等儲存完成後,點Close來關閉視窗。
帳號建立好以後,點New Repository以建立一個源碼庫。輸入項目名稱後按Create Repository即可。
項目建立好以後,複製源碼庫的連結,如git@github.com:vvasabi-test/test-project.git。回到項目資料夾,點右鍵並選擇TortoiseGit -> Settings。
在這個視窗中,選擇Git -> Remote,在Remote中輸入origin,Url中貼上剛剛複製的連結然後點Add New/Save。好了以後按OK。
這些步驟每個項目只需要做一次。
上傳修改內容(Push)
現在要把修改的內容上傳到GitHub。首先要建立認證密鑰,開啟開始選單 -> 所有程式 -> TortoiseGit -> Puttygen。點Generate,等待程式跑完,然後點Save private key,將此密鑰存到任意處。如果需要保障密鑰不會被盜用,可在儲存前輸入Key passphrase來用密碼保護密鑰(同樣的密碼需在Confirm passphrase內輸入一次)。如果沒有輸入密碼,出現PuTTYgen Warning時點Yes即可。
密鑰儲存完以後,回到開始選單,開啟所有程式 -> TortoiseGit -> Pageant。這時狀態列會跑出一個新圖示,在這圖示上點右鍵並選擇Add Key,然後選擇剛剛儲存的密鑰。
回到PuTTY Key Generator的視窗,並且選取和複製Public Key。開啟GitHub網頁,並點取Add your public key。點Add another public key,在Title欄輸入隨意名稱,在Key欄貼上密鑰,好了以後點Add key。
設定密鑰的步驟雖然很麻煩,好訊息是一台電腦只要設定一次。
回到項目資料夾,並按一右鍵,選擇TortoiseGit -> Push…。勾Push all branches,然後點OK,出現PuTTY Security Alert時點Yes(這隻會出現一次)。如果沒有出現錯誤警告,這就代表項目已成功地上傳到GitHub了。
平日工作流程
GitHub一開始的設定很麻煩,懶得設定這些步驟的人也可以只使用git而不使用GitHub。不過,這些設定大多隻要操作一次,所以最好可以有耐心地完成這些步驟。
平常修改程式碼時,在修改完以後需要儲存變更(Commit),在項目資料夾內點右鍵並點Git Commit -> "master"…。輸入修改的訊息,選擇要儲存的檔案並按OK。
好了以後,點TortoiseGit -> Push…來將修改上傳到GitHub。勾Push all branches,然後點OK。如果出現錯誤,請確定Pageant有開。沒有的話,請參照上面的步驟來開啟Pageant並加入先前儲存的密鑰。