SourceTree版本控管(四) - 基本功能介紹 Commit / Branch

  • Commit
Commit是Git系統最基本的單位,一個commit代表著一個專案的版本進度,使用者可以在不同的commit之間自由切換,這種概念類似於遊戲關卡的存檔紀錄。




本系列將會以Unity專案做說明,當然版本控制並不限於軟體開發,我們也可以只建立幾個簡單的記事本與資料夾來觀察其中的變化。



首先我們在Unity專案中建立兩個資料夾與一個場景。



回到SourceTree點選Working Copy,會發現下方的Unstaged files有很多項目,包括了剛剛新增的場景。



接著我們開始準備建立第一次的commit,之後要建立的commit都跟下面的流程無異。
勾選Unstaged files會將所有項目移到Staged files的欄位之中。然後點選下方的Commit message文字框。



這裡可以針對每一次的commit做描述,方便日後的管理,確認之後按下Commit。




我們可以看到Branches的欄位中多了一個master的項目,在右方的圖表會看到多出了一個節點,每一個節點代表一個commit。



接著回到Unity新增第二個場景。




再次回到SourceTree可以發現多了一行Uncommitted changes,這是因為SourceTree偵測到當前專案狀態與最後的最後提交的commit出現了差異。



我們要將目前的專案狀態保存下來,照著先前流程操作再次建立一個commit。




點選master之後會看到右邊的圖表多了一個節點,帶有白色漸層的節點表示目前專案的狀態歸屬。



我們也可以在不同的commit之間切換,只要點擊兩下左鍵即可,這種在不同commit之間互相切換的動作稱為checkout。



切換commit之後,Unity Editor中檔案結構也回復到先前的版本了。







  • Branch
我們在先前建立第一個了commit之後,發現到Branches的欄位多出了一個master的項目,master本身就是一個branch(分支),master同時也是每一個repository中最基本的開發線軸,類似遊戲中主線關卡的概念。



Git使用者隨時可以依據當前的commit版本建立一個新的branch,在新增的branch上建立的任何commit都不會影響到master的狀態。



因為這樣的特性我們可以使用branch來開發一些新的功能或者做一些測試,等到新功能完成之後再合併回master。我們也可以隨時捨棄這條branch,並且回到master的commit繼續開發。



首先回到SourceTree,確認專案版本處在master最後一個commit下,並且點選Branch按鈕。



在New Branch欄位上為新的branch命名,並且按下Create Branch。



接著可以看到Branches多了一個項目,此時兩個branch都處在同一個commit版本,這裡可以看到AudioPlayer顯示為粗底,代表目前專案版本處在AudioPlayer這個branch裡面。



我們希望開始在新的branch增加功能,首先確認目前專案處在新的branch路線上,接著回到Unity Editor,在Scripts路徑下新增一個腳本,並且在SourceTree建立一個新的commit版本。




我們可以從圖表中看到多出了一個新的節點,且這個節點附屬於AudioPlayer這個branch。



接著我們切換到master branch,Unity Editor的檔案架構則又回到了先前的狀態中。





在master branch下新增一個prefab。



從圖表中可以看到,master的狀態與AudioPlayer的狀態已經開始產生分歧,新的狀態變化依附在master branch。



將當前的狀態建立一個commit版本。




我們可以試著切換不同的branch來觀察專案版本之間的差異。




我們不只可以在master建立branch,也可以在其他的branch上分歧出新的branch。
隨著開發的功能越來越多,一個repository可能會同時存在很多個branch,如果在開發時沒有好好規劃,我們將會看到一堆複雜交錯的分歧線,這時候反而很難管理,這是使用branch必須要好好注意的地方。



總結:
一個commit代表一個版本進度,我們可以在不同的commit之間切換。





下面的章節將會講解如何使用Merge與Rebase做分支控管。
SourceTree版本控管(五) -  基本功能介紹 Merge / Rebase



留言

熱門文章