【Day06】 Git 版控流程簡易介紹


a. 為什麼要學會版本控制系統 ?

一開始在接觸版控的時,覺得怎麼那麼多,也無法理解它的操作方式,直到實際操作到 TFS 才開始有所瞭解。

版本控制系統,顧名思義就是管控版本的系統,當工程師的時候,每天都要修改程式碼,如果今天跟同事修改到同一支檔案的時候,誰要去比對差異、解程式碼衝突呢 ? 透過這樣的系統,可以清楚記錄下每個檔案是誰做了修改,就知道必須找誰負責了。


b. Git 分支概念

通常,在使用版控時,會有一個主要的分支 ( 大部分統一命名為 master ),目的是當工程師有各自需要針對這個專案添加功能時,能夠各自從 master 切出一支分支去做修改,待開發完成後再將各自的分支合併回 master,也能夠避免自己的程式碼被覆蓋。

因為每一次的修改的歷史紀錄都會被保存,所以當問題發生時,就能夠更快速的找到問題點去做修正。

詳細內容可見下方參考資料


c. 基本的分支切割方式

上圖所看到的 masterhotfixreleasedevelopfeature 這裡每一個都代表一個分支,每一個分支都存放專案原始碼。

以下內容會常看到 "從某 A 分支建立出某 B 分支" ,這個詞也就是將某 A 分支的內容複製到某 B 分支的意思。

在初始建立專案時,會先建立一個叫 master 的分支,此分支主要是負責管理目前發布的狀態,再從 master 建立出一個 develop 分支,所有新功能的開發最終都會合併至此分支

接下來,會從 develop 分支依照專案需求建立 feature 分支去做開發,以上圖來說就是切出了兩個 feature 分支,像是新功能的開發或是修復錯誤等,待開發完成後,再合併回 develop 分支。

由此可知,我們一般開發是在 develop 分支上進行,等到快要到發布狀態時,才會從 develop 分支建立 release 分支進行發布,此分支主要是做發布前最後錯誤修復所建立的分支,同時,其他人仍可以持續在 develop 分支上進行功能開發,不會影響目前的發布狀態。

到了可以發布的狀態時,記得將 release 分支合併至 master 分支,在合併提交裡添加 release 版本號標籤;同時,也記得將 release 分支合併至 develop 分支,以確保 develop 分支和 master 分支為同一個版本。

hotfix 分支是在發布的產品需要緊急修改時,從 master 分支建立出來的分支。

在 develop 分支上的開發還不完整,需要緊急修改,因為在 develop 分支建立可以發布的版本要花許多的時間,所以最好從 master 分支直接建立分支進行修改,然後再合併分支,最後也記得合併至 develop 分支,以確保版本一致。


d. Git 常見語法

1. 設定自己的 Git

  • 因為每一次提交 ( commit ) 修改,都會紀錄作者的訊息,因此必須先編輯自己的 Name 以及 E-mail。
$ git config --global user.name "xxxxxxx"
$ git config --global user.email "xxxx@xxxx"
  • 設定完成後,可查詢設定內容
$ git config --list

2. 建立新的 Repository

$ git init

3. 從 Github 複製別人的 Repository

  • GitHub 有提供兩種路徑,分別是 https 、 ssh ( 如下圖 ) ,官方推薦使用https,差別在於 ssh 必須先設定金鑰,可參考此連結
git clone https://11111@1111.git

4. 將修改的檔案加入版控

$ git add file.txt  // 加入file.txt
$ git add .         // 加入所有檔案

5. 提交修改的檔案

  • 記得必須先執行 $ git add 將修改檔案加入版控才可以提交。
$ git commit               
$ git commit -m "修改file.txt內容"  
// 可同時送出這次 commit 的訊息

6. 查詢過去 commit 紀錄

$ git log
$ git log --stat // --stat 參數可看到詳細內容
$ git log -p     // -p 可看到檔案更詳細的變更內容

7. 建立分支

$ git branch 分支名稱

8. 切換分支

$ git checkout 分支名稱

9. 合併分支

$ git merge 分支名稱

10. 更新遠端資料至本地端

$ git pull

11. 查詢目前 Git 的狀態

$ git status

12. 回復到上一次提交,並取消當前提交

$ git reset HEAD^ --hard

e. 與其他版控的差異

前面有提到Git 是一種分散式版本控制系統,這邊不多做介紹,想瞭解可參考此 連結,這裡針對 Git 相較其他版控的好處做說明。

  • 可離線在本地端操作
    即便無法連線至伺服器,仍然可以先 commit ,並繼續做後續的修改;也因為本機上記載完整的修改紀錄,如果需要比對歷史紀錄,也都可以在本機上進行,執行速度也相較集中式版控快速。
  • 檔案毀損風險低
    基於分散式架構的緣故,在各個用戶端都有完整的副本,就算今天伺服器壞掉了,也能夠利用各用戶端的副本進行復原,降低遺失檔案的風險。
  • 建立分支成本低
    Git 中開分支並非像其他集中式本控一樣把檔案全部複製一份,而只是多 fork 出一個指標,等到檔案真正被更動之後,才會真正把檔案複製出來做修改,所以不用擔心會浪費儲存空間等問題。

因此在開發的過程中,可在本機建立實驗性質的分支,確定再推送至遠端伺服器,或是失敗了再本機砍掉都無妨。


f. 參考資料

猴子都能懂得Git入門

Github 中的 ssh、https 路徑有什麼差異? - 如何設定 Github SSH 金鑰

Git 教學(1) : Git 的基本使用

使用Git的好處

為何改用 Git ?

#Git





七天系列文_使用 GitHub Page 快速架起網站,套用自己的喜歡的 Bootstrap 樣式,你也能夠擁有自己的網站唷 !

留言討論