2013年5月18日 星期六

Git教學:初學者使用心得分享(Windows)

http://www.mrmu.com.tw/2011/05/06/git-tutorial-for-beginner/

前陣子剛接觸git時,網路上很多git文章都很零散,針對windows平台的教學也不多 (也有發現一些文章像是寫給鬼看的XD),讓身為初學者的我痛苦指數一直上升,在使用一陣子後就想試試看整理一篇目前理解的使用心得。
先說明我的環境是 windows 7,目前專案寫的是php。之前使用版本控制軟體的經驗是有用過SVN,且是在windows下用TortoiseSVN,做一些簡單的操作,並且沒架過SVN server。先假設您不太了解什麼是版本控制,然後最近聽說Git很火紅,也想玩看看。
*什麼是版本控制?
開發專案時,開發者會一直寫入新的程式碼,或放進新檔案。如果有天出事了,某個功能以前明明可以跑,但突然掛點了,通常我們會回頭去看相關的程式碼,試著找出問題並修復。但如果專案規模不小或者是由很多人一起開發的專案,就會大大增加debug的難度。
版本控制軟體讓我們可以儲存專案不同時期的版本,如果每次有修改就存下一個版本(有些叫check-in,有些叫commit),出事時就可以回溯到之前還能正常執行的版本,並且比較兩個版本間有何不同,找出引起問題的程式碼。
另外有一些情況是:如果你想開發新功能,我們可以利用版本控制軟體,在專案中開一個分支(branch)來發展看看,或實驗看看,如果成功了,又能合併(merge)回原來的開發主線。
而目前版本控制做得最棒的聽說是Git,所以我們就要來試玩看看。

*Git是什麼?
Git就是一套版本控制軟體,相對於subversion(SVN)的中心式版本控制,git是分散式版本控制,幾乎什麼事都在本機進行,設計上「只會增加資料」,因此不要太怕出事,東西都可輕鬆復原。每個開發者的本機端都會有完整的程式庫,都能獨立作業,不受開發主線的拘束,不需網路連線也能工作。(這些描述都是參考本文最後附的參考資料,有個超棒的Git教學投影片,請一定要連過去看看)
*安裝Git
要在windows上安裝Git,目前並沒有太多選擇。我是安裝msysgit,網路上找都有安裝說明,你在安裝上應該不會有太多困難。記得勾bash(命令列)和gui,bash就是命令列操作模式,gui是圖形操作介面,但個人感覺git gui不太好用,如果真的不想用命令列,不如安裝TortoiseGit(著名的烏龜系列…),它的ui相比之下好用很多。
安裝完後,你可以試著在本機任一目錄上按右鍵,然後應該能在選單上看到 Git GUI hereGit Bash here 這兩個選項。後面文章若提到要執行Git命令,就是在目錄上按右鍵,選擇 Git Bash here,它就會跳出Dos視窗,你就可以針對這個目錄執行Git命令。
*每個開發者都擁有自己的倉庫(Repo)
接下來介紹安裝完後,我們如何利用Git「自己跟自己玩」。白話來說,就是在自己的電腦上,自己寫code後把變更提交(commit)到自己本機的倉庫(Repo)裡。
Repo是repository的簡稱,指的是倉庫、程式庫、版本庫…,簡單來說,Repo就是一個受Git版本控制的目錄。你可以先找一個空資料夾執行git init來建立新的Repo,若你有裝TortoiseGit,就可在空資料夾按右鍵,選擇Git create repository here,意思一樣。
當然若你有現成的程式專案目錄,也可以直接把它建成Repo,操作跟上述相同。
執行git init後這個資料夾就變成一個Repo了,裡頭會多一個名叫.git的目錄,而Repo在日後進行版本控制時所需的相關資訊都會存放在這個.git資料夾中。(.git目錄若砍掉了,這個目錄就不再是一個Repo了)
現在Repo目錄裡啥都沒有,所以可以先隨便新增一個README來試玩看看,執行:
touch README
執行後就會多一個空白的檔案叫README,如果要你放進其他的檔案試試看也行,就直接copy放進來吧。
這時我們的repo已經有新檔案了,但都還沒受到版本控制(untracked),不在版本控制清單中的檔案,就不會受到git控制,也就是你要把程式碼提交變更(commit)至repo時,這些untracked的檔案都不會被放進去。所以要執行add,讓檔案們進入所謂的staged狀態,才能接著把它們commit進Repo中。
要把所有檔案都加入staged狀態,執行:
git add -Agit add .
要把個別的檔案加入staged,執行:
git add 主檔名.副檔名
如果有些檔案你不想要再讓它受到版本控制了,也就是要把它unstage,那可以執行:
git reset 主檔名.副檔名
好的,現在確定好要commit第一版程式碼了,所以可以執行:
git commit -m ‘Initial commit’
也就是把所有檔案commit進repo,並且附上’Initial commit’的說明註解。而日後,如果commit過的檔案有再修改過,也需要再add一次成為staged狀態,然後再commit它們。
使用TortoiseGit就很方便了,按右鍵選擇選單中的Git Commit -> “master"… (請參考上面的選單圖),就會出現下圖:
按下ok就可以幫你commit了。
在操作過程中,如果想知道目前Repo中的檔案們到底是什麼狀況,到底誰要add,誰要commit,可以執行:
git status
了解了目前檔案的狀況,如果想要檢視一下這個Repo之前commit的歷史記錄,可以執行
git log
(記錄顯示會一頁一頁停住,按個q就會跳出來)
在我們每次commit後,都會產生一個新的程式碼版本,而這個版本都會有個落落長的唯一編號,日後要進行版本控制的操作時就是認這個編號。
* 出事了,我要回復上一動!(or 上上上..一動)
現在我們可以自己寫code,自己commit了,天天記錄新進度,感覺很踏實。但有一天發現某功能挫屎了。也許你確定上禮拜這邊還沒問題的,或某一版一定沒問題,這時我們可以利用Checkout來回溯之前的版本:
git checkout xxxx .
xxxx指的是版本編號的前四碼。
若您使用TortoiseGit,可以點選「Switch/Checkout」這個選項,如果您想切換Branch,可以在此選Branch並切換過去;如果您想回溯程式版本,就選Version,然後點一下後面的…按鈕,就會出現如下的畫面:
在此你可以看到此Repo所有Commit過的版本,有分支示意圖,也有日期、commit註解等,選擇你要的版本把它Checkout,就能回溯了。
本篇介紹了如何自己跟自己玩,如果要多人一起玩,要怎麼作呢?一定要架Git Server嗎?下一篇教您如何利用Dropbox作為Git Server,簡單又好用!
參考資料:
寫給大家的git教學 http://www.slideshare.net/littlebtc/git-5528339

沒有留言:

張貼留言