使用電腦處理資料時,一般會將資料以檔案型式進行儲存,以便於將來再次開啟並進行修改。但檔案或資料的修改,並不是單向式的處理方式。在許多情況下,檔案經過修改後,可能會發現原先的版本更符合實際需求,因此需要回復至原始版本。此時,如果原始檔案沒有事先保留,將面臨無法回復舊版本的窘況。使用一個好的版本控制系統,就可以避免以上情形的發生,而本文所介紹的Git就是這樣的工具。
除了上述兩種工作流程外,Git還支援主管與副手的工作流程模式。這樣的工作流程,對於像Linux核心之類的大型專案而言,使用上特別有效率。此種工作流程需要一名主管(或稱為獨裁者;Dictator)與多名副手,每一名副手都負責特定子系統的相關專案,該子系統下的所有修改,都會經由副手進行彙整。主管則是從副手已整理過的資料中取得整個專案的修改過程,並將所有修改實際寫入至原先的貯藏庫內。
資料保全
Git會確保使用者專案中的每一個位元,儲存的都是正確的資料,而這是透過Git本身使用的資料模式所達成的。專案中的每一個檔案都會經過檢查碼計算的過程,且在資料取出時,也會一併取得檢查碼的相關資料。
透過這樣的處理機制,在資料未經修改的情況下,基本上,使用者只能從Git貯藏庫內取得先前所存入的資料,而且完全不會有任何錯誤資料的情況發生。
除此之外,如果沒有變更ID欄位中的資訊,使用者將沒有任何方法可以進行Git貯藏庫內的檔案變更。另外,日期、遞交訊息或其他貯藏庫中的資料,也無法直接進行修改與處理。
所以只要有了遞交ID(Commit ID),使用者不但可以確認資料在遞交後仍然維持原先的內容,也能確保沒有任何人可以修改貯藏庫中的資料。而這樣的設計方式,在大多數的中央集權版本控制系統當中並不容易見到。
備料區
Git與其他系統在設計上有許多不同之處,其中一個是Git採用了名為「備料區」(Staging Area)的機制。備料區可以視為是一個中間區域,允許資料在完成遞交動作之前,還能進行格式化,或是加以重新檢視。
如此的設計方式,可以讓使用者快速處理一部分的檔案,並在尚未遞交工作目錄中所有已修改過檔案時,先行處理這一部分的檔案;也不需要在遞交指令中,列出這些檔案的名稱。
由於有了這樣的機制,使用者可以只處理已修改檔案之中的一部分。例如一個檔案因為時間過久,出現了兩個毫無相關的修改過程,而使用者也沒有意識到自己忘記遞交其中一個修改至系統內,因而造成問題。
此時,只要將欲處理的修改先加以遞交,再將另一個修改處於下一次的遞交作業中加以處理即可。這樣的特色,也讓檔案的修改次數可以大為增加,而不必在每次檔案一經修改後,便立即遞交至系統內。
備料區的特色並未強迫使用者加以接受,如果想略過這樣的設計功能,可以在所有的遞交命令中加上「-a」參數,即可一次將所有檔案的全部修改加入至備料區之中。
結語
本文大致介紹了Git的幾項重要特色,但這並不代表Git僅能提供這些功能。擁有廣大支持者的Git,正持續新增許多新功能,期盼能夠讓使用者在使用版本控制系統時更容易上手。
此外,Git支援的指令相當多,但只要理解幾個基本指令,便能立即開始使用Git,並享受Git所帶來的種種好處。雖然是以文字介面方式進行設計,但其操作並不如想像中的困難。