在上一期的文章中,已經大致介紹了Git所提供的功能與特色。本期文章將說明如何以Git內建的各種指令進行版本控制等相關工作。由於篇幅有限,本文將重心放在Git的基本操作介紹,例如如何建立或移除貯藏庫、怎樣查詢貯藏庫處理狀態,以及遞交檔案、檢視遞交紀錄。最後,還會介紹Git最重要的分支和合併功能。
整理貯藏庫檔案
如果檔案已經不需要再放置於貯藏庫之中,則可以使用「git rm」指令來加以刪除。此指令僅表示要將檔案移出貯藏庫,不需要再進行版本控制,也不會刪除本地端的檔案。執行過「git rm」指令之後,也需要執行「git commit」指令,才會實際進行刪除的動作。
若要修改貯藏庫中已存放檔案的檔名,則使用「git mv」指令,並以舊檔名與新檔名作為此指令的參數。另一種修改檔名的辦法,是先使用「git rm」指令,再以「git add」指令加入新檔案。
但後者需要輸入兩次指令,在使用上較不直覺。無論採用的是何種指令,最後都需要加上「git commit」,才能讓指令產生效果。
有些開放原始碼專案,也會使用Git進行版本控制管理,並開放一般使用者直接從網路下載完整的程式碼。在這種情況下,除了手動下載原始碼的壓縮檔外,多半也能使用「git clone」指令進行原始碼的複製動作。
「git clone」的指令格式為「git clone <來源貯藏庫> <目的貯藏庫>」,其中「來源貯藏庫」通常是一個.git檔案,並且以特定的網址進行下載,例如「http://path/to/repo.git」。
「目的貯藏庫」則是取得的原始碼要放置的目的目錄,如果使用「.」,表示要將下載的原始碼放置於目前目錄中。
「來源貯藏庫」除了可以使用http通訊協定外,也支援SSH、GIT、HTTPS、FTP、FTPS、RSYNC等各種常見的網路通訊協定,甚至也能使用「ssh://<帳號@主機>/path/to/repo.git」的格式進行下載。
如果「來源貯藏庫」與「目的貯藏庫」都在同一部主機之中,也可直接以路徑進行處理。例如「git clone /home/user/repo1 ./」指令,代表要將「/home/user/repo1」路徑下所存放的貯藏庫,直接複製一份至目前目錄內。
如果想要將貯藏庫的資料輸出成檔案,並且讓其他人可以利用「git clone」指令進行下載,則使用「git bundle」指令來進行,其指令格式為「git bundle create repo.git --all」。
接著,將產生的repo.git檔案放置於正確的網站目錄下,即可讓他人使用「git clone」指令,經由網路進行貯藏庫複製的工作。
分支與合併
Git本身提供的功能相當多,但最值得一提的,或許會是分支與合併的功能。在專案開發的過程中,有許多時間點需要將專案進行分支,並分別進行管理。例如開發了新版本的軟體,但舊版本仍有客戶在使用,此時便需要利用分支功能同時維護這兩種版本。
如果舊版本已經不再有客戶使用,便可以利用合併功能,將兩個版本的檔案加以比對與組合,並且合併為一個新的分支版本。
Git預設使用「master」分支,所有分支都會以此分支為根節點。以Git進行分支的指令相當直覺,即「git branch <分支名稱>」。如果分支已經不再需要,可使用「git branch –d <分支名稱>」加以刪除。
由於分支刪除後,系統無法決定目前所使用的分支點為何,因此只有在該分支為非使用狀態下,才能進行刪除。
|
▲分支指令是Git相當重要的功能之一。 |
建立分支後,如果要切換至某個分支點,可使用「git checkout <分支名稱>」。例如要回到master分支,則輸入「git checkout master」指令。分支剛建立時,並不會立即列為使用中的分支,因此必須先使用「git checkout」指令切換到該分支,才能針對新分支進行處理。
「git branch」指令單獨執行而未指定分支名稱時,會列出目前所有分支的名稱,並在作用中的分支名稱前方加上星號。如果需要更進一步的分支資訊,則使用「git show-branch」指令。如果只想單獨查看某些分支的詳細資訊,則在此指令的後方加上分支名稱。
如果希望合併分支,必須使用「git merge」指令。此時要注意的是,「git merge」指定的是欲合併的分支來源,此處所指定的分支會與現在所使用的分支進行合併。
例如,目前使用的分支為「branch-5」,而「branch-5」希望與「branch-3」進行合併,此時應先使用「git checkout branch-5」指令將目前分支切換至「branch-5」,再輸入「git merge branch-3」進行合併。
由於Git在合併分支時,並不會自行處理衝突情況,所以如果兩個分支有衝突現象發生,應先使用「git diff」指令檢視兩個分支的衝突情況,並在自行修改過後,重新將檔案加入貯藏庫中並進行遞交,才能真正完成合併分支的動作。
|
▲合併分支時可能會產生衝突現象,必須自行處理衝突點,再重新加入貯藏庫中。 |
結語
Git的運作原理也許有些複雜,而完全以指令進行操作的動作模式,或許也會對部分使用者造成困擾。其實只要理解幾個基本的指令,任何人都能以最快的速度學會Git。如果能夠善用Git所提供的功能進行版本控制,相信對於專案開發將有相當程度的幫助。