在上一期的文章中,已經大致介紹了Git所提供的功能與特色。本期文章將說明如何以Git內建的各種指令進行版本控制等相關工作。由於篇幅有限,本文將重心放在Git的基本操作介紹,例如如何建立或移除貯藏庫、怎樣查詢貯藏庫處理狀態,以及遞交檔案、檢視遞交紀錄。最後,還會介紹Git最重要的分支和合併功能。
查詢貯藏庫處理狀態
檔案加入貯藏庫之後,可以使用「git status指令查詢目前貯藏庫的處理狀態。如果在執行「git add」指令前先執行一次「git status」指令,可以看到Git雖然知道本地目錄中有一些新檔案的存在,但並不會進行處理(僅列出檔案名稱,但並未在檔案名稱前方加上相關訊息)。
如果在執行過「git add」指令後再執行一次「git status」指令,新加入的檔案名稱前方將會被加上「new file」訊息,表示這些檔案會在稍後執行過遞交指令後,正式加入貯藏庫內。
|
▲檔案加入貯藏庫之後,可以使用「git status」指令來查詢目前的狀態。 |
遞交檔案
當檔案以「git add」指令加入貯藏庫之後,此時尚未將這些檔案正式放入Git的管理名單中。必須要等到使用者執行過「git commit」命令,才會正式將檔案遞交至Git的貯藏庫內。
這樣的設計與大多數的版本控制系統相同,所有的操作動作都要在執行過遞交指令之後,才會正式成立。尚未遞交的檔案,還可以再次進行修改,待所有修改都確認完成之後,再次遞交至Git系統之中。
使用者不必擔心會因為針對檔案進行一連串的修改,而造成系統中儲存了許多不同的檔案版本,甚至造成困擾。
遞交檔案時,系統會先呼叫文字編輯器,並要求使用者輸入此次遞交的相關訊息,例如此遞交版本修改的原因為何、遞交者的身分等各種資訊。
這些資訊通常也能利用Git的指令與參數直接加以指定,例如「git commit -m "<遞交訊息>" --author="The User "」指令,可以直接指定遞交此版本的原因(即遞交訊息 -m 欄位),以及說明此版本是由誰所遞交。以此處的範例而言,遞交者的名稱為「The User」,其電子郵件位址是「theuser@some.where.com」。
遞交完成之後,如果再次執行「git status」指令,則Git會告知目前並沒有任何檔案或資訊需要被遞交,除非使用者又修改了本地目錄中的檔案,才會在「git status」指令中見到相關的說明。
在修改檔案之後,也需要再次遞交此檔案,以便讓Git得知此檔案有經過修改。遞交單一檔案的指令格式為「git commit <檔案名稱>」,也可使用萬用字元以同時遞交多個檔案。
由於在大多數情況下,使用者可能會在固定的主機中執行Git指令,並遞交各種修改後的結果,因此遞交時所使用的使用者名稱與電子郵件都會是同一個人。
此時,如果希望可以減少輸入指令與參數的字數,可以先行利用「git config」指令加以設定。例如「git config user.name "The User"」指令,表示系統預設的Git遞交使用者名稱為「The User」,而電子郵件位址則是「git config」指令中所指定的「theuser@some.where.com」。
設定過這些參數之後,接下來所有的遞交動作,都會自動帶入此設定值,使用者只須輸入遞交訊息即可完成遞交工作。
除了使用「git config」指令指定遞交者的身分外,亦可直接在Shell中設定環境變數,以便自動在遞交資訊時,直接加入相關的資料。遞交者名稱所使用的環境變數為「GIT_AUTHOR_NAME」,而電子郵件位址為「GIT_AUTHOR_EMAIL」。
要特別注意的是,這兩個環境變數一旦被設定,將會取代任何配置設定。也就是說,由環境變數所指定的設定值擁有最高優先權,不會被其他設定方式覆蓋其設定值。
檢視遞交記錄
如果希望檢視遞交記錄,則使用「git log」指令。執行此指令之後,Git會顯示此貯藏庫的所有遞交記錄。如果只打算查看某一次遞交作業的相關訊息,可使用「git log <遞交代碼>」的指令格式加以處理。
「遞交代碼」其實是貯藏庫經過SHA雜湊演算法計算過後,所取得的雜湊碼,其長度為160位元(bit)(以16進位顯示,則會是40個0?F的字元)。許多Git的指令都會使用「遞交代碼」作為參數,所以在需要取得「遞交代碼」時,也可以使用「git log」指令加以查詢。
|
▲「git log」指令可以查詢遞交代碼。 |
「git log」指令只會顯示最陽春的遞交資訊,包括遞交者的名稱、電子郵件,以及遞交所發生的日期與其遞交訊息等等。如果希望取得更進一步的資訊,可使用「git show」指令。
「git show」指令可以加上「遞交代碼」作為參數,表示要查詢該次遞交的詳細資料。如果執行「git show」指令時未加上「遞交代碼」,則會顯示最近一次的遞交資訊。
「git show」指令除了會列出遞交的基本資訊(如遞交者的身分、電子郵件、遞交日期與遞交訊息等等)之外,還會詳細顯示該次遞交所發生的異動過程。例如加入檔案的內容,或是現存檔案經過的修改過程等等,都是「git show」指令的輸出結果。
|
▲「git show」指令可以顯示更加詳細的異動過程。 |
如果打算檢視兩次遞交之間的差異所在,則使用「git diff」指令,指令格式為「git diff <遞交代碼1>
<遞交代碼2>」。
此指令的輸出格式與UNIX/Linux的「diff -u」指令類似,都會以「+」或「-」表示兩個檔案之間的差異(在git中,則是表示同一個檔案在兩次遞交之間的差異)。如果需要找出兩次遞交之間所經過的修改與變更為何,善用「git diff」指令將是相當方便的處理方式。