使用電腦處理資料時,一般會將資料以檔案型式進行儲存,以便於將來再次開啟並進行修改。但檔案或資料的修改,並不是單向式的處理方式。在許多情況下,檔案經過修改後,可能會發現原先的版本更符合實際需求,因此需要回復至原始版本。此時,如果原始檔案沒有事先保留,將面臨無法回復舊版本的窘況。使用一個好的版本控制系統,就可以避免以上情形的發生,而本文所介紹的Git就是這樣的工具。
也因為Git擁有這樣的特色,因此可以十分輕易地進行各種實驗,而不必擔心原先的進度會因此而受到破壞。例如新建一個分支,並嘗試各種新的改善方案,或是套用新的軟體更新,以確認這些修改方式對於軟體本身的穩定性是否會造成任何影響。如果新方法或軟體更新有任何問題,也能立即回復到先前的穩定版本。
善用分支功能,也能讓每一個分支擁有不同的角色。一般而言,所有的分支之中只有一個分支會作為正式版本使用,其他分支則可能是當作測試功能,或是用來區別每一天的進度差異所在。
另外一種使用分支功能的可能方式是,在每次加入新功能時都建立一個新分支。如此一來,無論系統的規格如何變更,造成功能上的改變,都不需要擔心會造成程式設計師太大的負擔。如果要採用新功能,直接選擇含有新功能的分支。
如果想要移除這項功能,改用原先版本的分支即可。倘若新功能確定不會再被移除,也可以將所有的舊分支全數刪除,並將新功能合併至最後的分支版本之中。
除此之外,如果建立一個新的分支,並以此分支進行實驗,最後卻發現實驗結果不盡理想且無法再進行改善,通常會直接將此分支刪除,並放棄此實驗之中所進行的全部成果。但此時並不需要擔心任何人會看到這些實驗的內容與成果,即使在這之前,已經合併了其他分支的內容也是一樣。
此外,如果要將專案內容放置到位於遠端主機的貯藏庫(Repository)之中,並不需要將自己的所有分支全數上傳。使用者可以選擇要分享分支中的其中一個分支、一部分數量的分支,或是所有分支,其決定權在使用者身上。
這樣的設計方式,讓使用者可以決定要如何分享自己的新想法,而不必擔心該如何計畫新分支的合併/分享方式與其時間點。
其他系統自然也有方法可以完成上述的分支、合併功能,但使用上並不如Git來得簡潔,操作複雜度相較之下也比Git高出許多。Git的分支、合併功能在操作上非常容易使用,也徹底改變大多數程式開發人員對於版本控制系統的想法。
|
▲Git的分支與合併功能是其一大特色。 |
執行效能
在Git為人所熟知的特色之中,除了分支與合併外,其執行效能也是其中之一。由於Git是分散式的版本控制系統,幾乎所有的動作都是在本地端進行操作,因此其執行速度相當快。
相較於中央集權式或主從式架構的系統,由於這些系統多半要與某部遠端主機進行溝通,所以執行速度自然下降許多。
Git執行速度較快的特色,並不會因為處理專案的規模大小而有所區別。由於Git最早便是針對Linux核心的版本管理所設計,因此從第一個版本開始,在處理大型專案時都能夠提供相當良好的表現。
另外,由於Git是使用C語言開發而成,而C語言的執行效能向來比其他高階語言表現更好,因此可以減少許多高階語言常見的執行時間效能低落問題。我們甚至可以說,Git從第一天開始,便以執行速度與效能作為整個專案的主要目標。
如果要以更客觀的方式評斷Git的執行效能,可以透過效能測試程式的輔助來加以實現。在Git的官網中便提供了一個統計表格,讓使用者可以比較Git與Subversion在進行各種工作處理時各自效能表現的差異。除了一、二個項目Git只能提供較差或接近的效能外,在其他項目的執行速度上,Git都是遙遙領先,足以證明Git的優良表現。
分散式處理機制
分散式版本管理系統(包括Git在內)最佳的特色之一,便是本身是以分散式技術進行運作。而這樣的機制,也讓Git在處理資料時與其他版本控制系統有些不同。例如進行程式碼匯出工作時,中央集權式的版本控制系統會以取出(Check Out)的方式進行,但在Git中則是以複製(Clone)的概念加以處理。
分散式處理機制帶來的另一個好處,則是多重備份。每一個使用基本上都擁有一份主要伺服器的拷貝,即使是以中央集權式的工作流程進行處理,情況也是相同。
萬一主要伺服器發生任何問題,造成資料毀損,即可從其中一份拷貝取得原有資料,並回存至主機之中。事實上,在使用Git時,並不會發生單一節點毀損的問題,除非該專案的資料僅存放於一個貯藏庫內。
也因為Git採用了分散式版本控制系統的設計方式,再加上良好的分支系統支援,所以幾乎可以在Git內實現所有的工作流程。更重要的一點是,操作方法也相當簡單,至少與其他版本控制系統相比之下,可以得到這樣的結論。
如果要以工作流程的類別加以區分,Git能夠支援三種不同的工作流程模式。第一種是Subversion樣式的工作流程,基本上便是中央集權式的工作流程。中央集權式的工作流程相當常見,這對從中央集權式系統轉換而來的使用者而言更是如此。
基本上,Git在使用此類型的工作流程時,仍然有些許限制。例如使用者先前提取專案內容至本地端,但在該時間點之後,有其他使用者回存了修改過的資料,此時Git便不允許使用者再將自己的資料進行回存。也因為Git有這樣的保護機制存在,才能讓多名使用者同時使用相同的主機進行版本控制,且不會產生問題。
另一種工作流程則是整合管理式的工作流程,此種工作流程需要指派一名整合管理員,專門負責處理將修改過的資料整合至貯藏庫的工作。
通常這種工作流程會有許多不同的開發人員從貯藏庫內複製資料至本地端,修改後將資料回存,但此時資料並不會真正寫入原先的貯藏庫中,而是經由管理員認可後,這些修改才能真正進入貯藏庫內。這樣的工作模式,通常會在開發式原始碼專案內,或是GitHub格式的貯藏庫之中找到。