Pull Request是一個非常好的Code Review方式,也是當初Github讓git火紅起來的其中一個原因之一。
在建立Pull Request的時候,一般會有一段訊息可以輸入,這個訊息主要描述了這一次Pull Request的一個主要目的。
但是,當團隊合作開發的時候,很有可能A工程師會輸入一種格式的内容,而B工程師又是另外一種。或者有時候有些條件需要符合才應該發起Pull Request,但是工程師忘記了,造成Reviewer需要花時間最後才發現根本最基本的條件都沒達到。
有沒有什麽方式可以提醒工程師在Pull Request發起的訊息要打好,並且該檢查的東西都要檢查過了呢?
這一篇,來看看在Azure DevOps裡面,如何透過建立template(範本)達到這個需求。
爲什麽需要自訂Template
從開頭大概知道了爲什麽應該要自訂template,快速總結一下。
自訂template的好處有:
- 可以確保建立Pull Request的人知道應該至少要輸入什麽
- 可以作爲一個checklist,提醒某些事情要做好在開pull request
- Pull Request輸入的文字會變成commit message的一部分 - 在未來查找歷史很有幫助
光列出優點可能沒什麽感覺,直接看一個對比差異就有feel了。
首先,如果是一個沒有template的情況,那麽預設的Description
呈現的是commit的訊息,例如:
相較而言,如果今天有個template看到的可能是:
有template在搭配markdown裡面的checkbox,可以很容易建立出一個checklist,可以讓建立的人,做好每一項的時候把已經做好的打勾,然後reviewer只需要一看有沒打勾的直接退回,節省時間。
如果説今天只是用Azure DevOps做版控,但是issue tracking在別的地方,那麽這個時候就沒辦法用work items
直接關聯,但是就可以用第三項的形式把對應issue貼上。
有個好處是,當pull request完成的時候,這邊的訊息會一起進入commit message,未來很好查log的時候找到原始的單。
有feel了之後就要看看如何建立。
如何建立自己的template
要建立template非常的簡單,需要瞭解兩個概念:
- Template要放在某個特殊位置
- Template名稱+位置可以決定什麽時候自動出現
Template要放在某個特殊位置
Template是放在 Git Repo
裡面,換句話説,和Source Code放在一起。
不過放在那邊是有特殊位置,總共有:
- 放在root下面的
.azuredevops
資料夾裡面 - 放在root下面的
.vsts
資料夾裡面 - 放在root下面的
docs
資料夾裡面 - 放在root下面
Default Branch
的會啟作用,後面會詳細介紹。
放那邊就看各人的喜好啦,我喜歡放在docs
下面,因爲我個人建議所有的專案建立的資料夾結構就有docs
。
置入一下以前的另外一篇文章:該怎麼開專案的資料夾結構?每個專案應該要有的資料夾結構和檔案
有了位置,接下來就是要看Template名稱和位置的差異。
Template名稱和位置可以決定什麽時候自動出現
知道了基本路徑之後,就需要瞭解一下template的名稱以及會影響到的出現時間。
總共有3種類型的template:
- Default Template:如果其他都沒有的情況下,要使用的Template
- Branch Template:要指定pull request的目標是某一個branch的時候用
- Additional Template:這種template不會預設使用,而是放在旁邊可以讓建立Pull Request的人選用
知道了不同差異,來看看每一個如何設定以及使用
Default Template
只需要在上面提到的base資料夾下面加入一個檔案名稱為:
- pull_request_template.md
- pull_request_template.txt
md
結尾或者txt
結尾的一個pull_request_template
檔案。
所以以下範例位置都有一樣的效果 (完整的路徑):
{repository root}/.azuredevops/pull_request_template.md
{repository root}/.vsts/pull_request_template.md
{repository root}/docs/pull_request_template.md
{repository root}/pull_request_template.md
Branch Template
有時候不同的branch要有不同的注意事項,這個時候就可以用branch template來蓋掉default template
只需要在上面提到的base資料夾下面的pull_request_template/branches/
,然後branch名稱為檔案名稱結尾是md
或者txt
。
舉例來説,如果今天有個針對merge到master
branch的template,那麽下面擇一即可(完整路徑):
{repository root}/.azuredevops/pull_request_template/branches/master.md
{repository root}/.vsts/pull_request_template/branches/master.md
{repository root}/docs/pull_request_template/branches/master.md
{repository root}/pull_request_template/branches/master.md
{branch}/*
。換句話説,如果有個branch template是feature.md
,那麽 feature
,或者feature/*
都會使用這個
Additional Template
有些Template預設不會使用,但是如果要用的話可以容易加入,這種就是Additional Template。
建立很簡單,只需要在上面提到的base資料夾下面的pull_request_template/
,然後任何檔案名稱結尾是md
或者txt
。
舉例來説,如果今天有個Additional Template叫做Addition
,那麽下面擇一即可(完整路徑):
{repository root}/.azuredevops/pull_request_template/addition.md
{repository root}/.vsts/pull_request_template/addition.md
{repository root}/docs/pull_request_template/addition.md
{repository root}/pull_request_template/addition.md
下圖左邊可以看到總共有3種template,然後可以透過點選説明游俠框的地方去選擇要不要使用template:
常見問題 - 爲什麽template沒有出現
當遇到template有設定,但是沒有出現的時候,注意兩件事情:
- 確認template放在正確位置以及檔名格式是正確
- 確認template放在了Default Branch裡面
第一點檢查沒什麽好説,就看上一段的内容,看要什麽template,就檢查那個。
但是第二點的Default Branch是什麽?
在Azure DevOps有所謂的Default Branch,也就是預設要做pull request的時候選擇的branch。Template要放在這個branch裡面才有作用。
master
知道了怎麽看Default Branch之後,下一個問題就是怎麽改?
修改只需要:
- 點選選左下角的
Project Settings
- 選擇
Repositories
- 展開repo,然後找到要設定為Default的那個branch
- 點選旁邊的3個點,就會出現選項:
Set as default branch
結語
我們常説,刪比新增來的快,因此有個template除了可以提醒要做什麽之外,如果有一些常見的輸入内容也可以用template幫大家準備好,只需要套用然後微調就好。
或許看起來只是小地方,但是可以讓未來維護或查找變得更加方便。