iT邦幫忙

2023 iThome 鐵人賽

DAY 16
0
DevOps

任務導向的Azure DevOps 系列文系列 第 16

Day 16 任務導向的Azure DevOps 系列文 - SDLC 的一個循環要注意的事項,讓我們交付到測試環境:Pull Request - 2

  • 分享至 

  • xImage
  •  

四種合併模式

延伸昨天的pull request繼續說,這是我非常喜歡Azure DevOps 的一個功能,就是合併是在這裡進行,而且可視化。當我們要進行pull request comptele的時候,你會需要選擇該如何併入你的 target 分支裡面。

最早以前我們在使用git的時候,從來就沒有思考過該用哪一種merge,反正併的進去就好,有衝突解決就好。其實那也是因為我們並不了解那些不同的合併方式到底會長成怎樣,反正最終交的出東西來即可。

merge

但在這種狀況下,當越多人一起開發,branch 分支開越來越多的時候,很容易就會發生一個問題,那就是到底我這個commit的parent是誰? 因為最基本預設的merge就是很單純的岔入target中,所以線圖就有可能會變得亂七八糟的,當然如果永遠向未來眺望,那也不用太在意那麻花般的線圖。

這次在Azure DevOps 的學習之路中,這個功能著實的讓我直觀的瞭解這四種合併模式,所產出的結果有所不同,因此用一點篇幅來說這個功能。

Merge (no fast forward)

Merge

這就是最基本的,從你開始建立feature branch的base,岔出來的開發完後,就合併回target的現況。這就是我們如果選擇merge的預設,就可以簡單的完成任務,但如果是多人開發,就很有可能得到上面的線圖。

Squash commit

Squash commit

Squash commit 的特點就是,他會幫你把所有feature 上的軌跡,都合併成一個commit,然後放到target head的最前面。這樣的好處是,整個樹形會非常乾淨,而且你在feature branch如果有很多零碎的實驗,就不會被留存在軌跡中(其實還是查的到啦)。

這種其實很適合Feature branch 再併入Develop branch,原因是開發階段總有一大堆實驗,那如果太瑣碎,其實資訊量會過大,因此使用在這種場景其實很適用。而且也可以以這個Commit作為PR的依據,可以清楚知道Develop branch的每一個commit是清楚的被PR進來的。

Rebase and fast-forward

Rebase and fast-forward
Rebase and fast-forward 的特點就是,他會先幫你rebase到target 的head,然後把你feature branch的軌跡全部的commit都搬到target中。

但是對筆者而言,目前在我們公司的環境比較想像不到該用在甚麼狀況下,因為他會把PR的痕跡消失掉,就比較不容易知道這些被保護的Branch 是經過了PR而被放入。我唯一比較想的到的就是如果自己是多個Feature 在做開發,想要併成一個branch而已,但是這樣自己在本端做應該就好了,所以暫時比較想不到怎樣利用這種模式比較好。

Semi-linear merge

Semi-linear merge

這個模式目前是我們團隊最常使用的模式,他就是先幫你rebase 到target head後,幫你做了一個merge,並且新增了一個新的commit。

這種對我們的優點是,可以看到我們多努力XD,但卻又不會把整個圖形變得很混亂。不過這種我也很推薦,特別是從Develop 要併入main的時候,這樣可以清楚的知道是從Develop的哪一個commit被PR進入main。

整型前,整形後

有幸我們在今年初了解了這四種模式的用法,現在公司內先導專案的線形就漂亮多了:

Semi-linear merge

上面那四種模式並沒有一定哪一種才是絕對該用的模式,這一且都還是取決於團隊或是開發者個人對於版本控管的看法,希望可以達到怎樣的線形,在管理上才好說明,或是好追蹤。

另外一說就是,project可以針對repo中的branch,限制只能使用哪一種merge type,位置如下:

merge type setting

那表示未來我可以針對main branch 要求只能使用semi-linear merge,這樣可以清楚辨識develop branch併入的時機。

刪除你的feature branch ,雲地都要

在選好你的merge type的時候,下面會有個選項,Delete XXX after merging,如果是併入develop branch的時候,請習慣性地一定要把這個勾起來,把不需要用的feature branch 在使用後刪除,比較不會造成困擾。

delete feature branch

另外就是,由於並不是在自己的開發機器的git上面進行merge的動作,因此記得switch 回devlop branch,然後把地端的feature branch也要一併刪除。不然又推上去就很可能會造成版本錯亂,雖說develop branch是被保護住的,但是開發遇到這種阿札的問題總是讓人很不爽,所以這個小小的習慣要建立起來。

delete local branch

第一次交付測試環境,完成

running pipeline

由於Pull request已經結束,所以feature branch 已經被合併進入develop branch了,上圖可以看到,develop branch的更新觸發了pipeline進行CI/CD的動作。

這時候我們只要等著pipeline跑完,就可以告訴使用者這個項目已經交測了。但記得,去關聯的user story #18 做兩件事情:

  • assign to user
  • status 切換到 交付測試

user story status change

終於!第一次交付測試了!!


上一篇
Day 15 任務導向的Azure DevOps 系列文 - SDLC 的一個循環要注意的事項,讓我們交付到測試環境:Pull Request - 1
下一篇
Day 17 任務導向的Azure DevOps 系列文 - 交付測試了,然後呢?淺談測試的困境。
系列文
任務導向的Azure DevOps 系列文30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言