Git Branching Model

TL;DR 模型的選擇並非絕對,你也可以用其中一種模型用到底,只是在使用上就不會這麼順暢。你可以在迭代快速的 Web 服務使用略為繁瑣的 Git Flow 也可以在需要同時支援多個版本服務的專案上使用 GitHub Flow 只是你會發現你會越用越受到流程的限制,最後要不就是放棄既有流程,不然就弄出一個屬於自己的流程(但我覺得這不見得是壞事,只是需要多一點團隊教育成本),在選用分支模型前還要先看看你們服務的上版節奏以及是否需要同時支援不同版本的情況。 Why Branching Model Matter 通常會需要考量用什麼分支模型基本上都是有協作的需求,開發的人不是只有一到兩個人,才會需要有一個大家都知道的開分支後合併的方式,才不會亂成一鍋粥。也可以在 release 時清楚的知道要從那一個 commit 出一個 artifact。 分支模型不只跟開發團隊如何協作有關,也關乎到團隊是如何做發布。近年很多在討論 DevOps 相關的場合裡滿多都在討論工具要怎麼使用,也有滿多篇幅討論怎麼做 CI/CD ,甚至是部屬時要用什麼樣的策略,金絲雀部屬、藍綠部屬等。不過卻滿少連帶討論到團隊的分支模型是怎麼選擇的。因為模型的選擇也跟團隊的部屬節奏有關連,若發布新版本的節奏很快的話(一週內就一個甚至多個新的版本推上去)甚至可以不需要 hotfix branch 的存在,但若是節奏很不穩定的話或是偏長(數週甚至數月一個版本)那 hotfix 就需要特別考量在分支模型裡面。以下就以常見的分支模型來分別探討他們適合用在哪些情境。 GIT FLOW ref: https://nvie.com/posts/a-successful-git-branching-model/ 這算是很早期提出來的分支模型。分支數量算是最多的一種,所以線圖也算是相對不需要做什麼動作就顯的複雜的一種。雖然這個模型相對麻煩,操作也相對繁瑣,但是因為發展最久大家也算是相對熟悉的模式,甚至還有 CLI 工具與 GUI 工具支援這個模型的操作。 這個模式還滿適合發布頻率較為穩定的服務,也能很好的符合稽查相關的需求,另外就是有特別切出 release branch 的關係,需要同時支援多個版版時,會比較容易一些。 分支是常見的模型中最多的,因此操作步驟相對最複雜,也滿吃團隊成員對於 git 的操作(當然是有工具可以減輕負擔跟知識要求,但出問題時的修復比較麻煩)。但需要注意的是,當同時開發的 feature branch 變多的時候管理會顯的相對不容易。 GITHUB FLOW ref: https://github.com/skills/release-based-workflow 這個模式基本上是以 branch 為主的極簡化版本,捨去了 release branch, hotfix branch 和只為了發布時下 tag 使用的 master branch。保留了 main branch 同時兼具開發時為基底的需求,同時也是 release 時下 tag 的目標 branch。同樣在開發功能時會切出一個 feature branch 做管理。 ...

April 23, 2023 · 2 分鐘 · 299 字

Git Submodule Step by Step

前言 Git 裡面有多強大但是使用時機沒這麼廣泛的功能,submodule (Git - Submodules) 就是其中一個。目前大多數的專案應該不會用到這個東西吧,最近也是因為部落格布景主題要換(又想換了 XD)所以才又重新再回憶這段指令。 What is submodule? 在軟體開發的過程中,有一些發展比較古老的大型專案,為了要將專案作更細緻的管理會將大型專案切分成數個小型專案,然後這些專案會交給不同的開發團對來開發,這樣做的話就可以讓一個 repo 瘦身,也可以讓多個團隊同時開發一個大型專案。而這些 submodule 又可以擁有各自的版控,但又不會跟主要的專案脫勾,在解耦的同時保有一定的連結。 還有另外一種使用 submodule 的情境,就是你的專案需要把別人的東西納入,而這依賴還不能透過套件管理程式 (比較常見的大概會是 Web 類型的專案,引入別人的樣式或是 template),需要將原始碼納入專案中,這時該怎麼處理?另外,假設對方還會更新這個東西的話,單純只把對方的原始碼 Copy 下來就顯的不切實際一點了。我們可以怎麼做呢?這個時候 submodule 就會是很好的解決方案。 新增一個 submodule 方式滿簡潔的,基本語法如下: 1 git submodule add <remote repository> <local path> 實際範例: 這邊假設你目前的位置就是主 repo 的根目錄。然後不需要先幫他建立空的目錄。 1 git submodule add https://github.com/chipzoller/hugo-clarity.git themes\hugo-clarity 1 2 3 4 5 6 7 8 9 🕙 {your prompt} ➜ git submodule add https://github.com/chipzoller/hugo-clarity.git themes/hugo-clarity Cloning into 'D:/Repos/Tutorials/ElsaWorkflowTutorial/themes/hugo-clarity'... remote: Enumerating objects: 5085, done. remote: Counting objects: 100% (2/2), done. remote: Compressing objects: 100% (2/2), done. Receiving objects: 100% (5085/5085), 6.10 MiB | 12.88 MiB/s, done. Resolving deltas: 100% (3126/3126), done. warning: in the working copy of '.gitmodules', LF will be replaced by CRLF the next time Git touches it 從這邊的資訊可以發現所謂的 submodule add 就是會把別人的原始碼給抓下來,不過入版控的內容你會發現他其實只記錄了那個 repo 的 sha1。可以 diff 一下你會發現他的獨特之處 ...

September 30, 2022 · 2 分鐘 · 407 字

Git on Windows a Rookie Tutorial

前言 使用 Git 也有一段時間了,但是一直以來都很依賴使用 GUI 來幫忙做事情,甚少使用指令。 在一次 GUI 改版後因為使用 GUI 的回應速度真的是太慢了,所以才開始學習使用指令來做事,也是這時才發現原來使用指令沒有想像中麻煩,也如預期中的非常快速。 因此這邊就我自己的使用心得來分享,也因為我在使用 git 指令時有很多設定是已經在安裝 GUI 時就設定完畢的,所以這邊的常用指令其實是就我個人使用上而言。 像是有很多 remote repository 的設定我不是使用指令來完成的,這部分的指令就之後有機會再補上了。 安裝 下載路徑:https://git-for-windows.github.io/ GUI:https://git-scm.com/downloads/guis 下載安裝檔後基本上用預設值並一直按下下一步就好 [圖 Install-1] [圖 Install-2] [圖 Install-3] 在 Powershell 更輕易的使用 Git(posh-git): 使用 PsGet 安裝 PsGet => Powershell安裝套件的好幫手 posh-git => 在 powershell 使用 git 的好幫手 1 2 (new-object Net.WebClient).DownloadString("http://psget.net/GetPsGet.ps1") | iex Install-Module posh-git [圖 Install-4] 但若使用這種方式安裝,每次關掉 powershell 要再使用就需要先下個 1 Import-Module posh-git 才能使用。若不想這麼麻煩的話,打開一個新的 powershell prompt 直接輸入 ...

June 11, 2017 · 2 分鐘 · 351 字