iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
Software Development

用30天介紹 open source 專案 Ohara 系列 第 28

Day 28 關於 Ohara 開 PR (Pull Request) 的流程

  • 分享至 

  • xImage
  •  

Ohara 是一個 open source,開發者不可能只有一個人,為了保護程式碼不能隨便被破壞,例如是 compiler 失敗的程式碼不小心被送到 master 裡面,這樣會導致其它人把程式碼更新之後都沒辦法執行或者是程式碼發生了衝突還是硬要推到 master 裡,會使程式碼的版本控管亂掉,因此 Ohara 的程式碼版本的管理和其它 Open Source 的程式碼管理是相似的,都是一樣使用開 PR (Pull Request) 的機制,以下列出幾個開 PR 的好處:

  • 每個人開發的程式碼是使用不同的 branch,因此不會互相影響開發。有可能影響的地方在 rebase 更新了 master 的程式碼之後,有些 class 的名稱有可能被修改,這個 branch 有呼叫到的地方也要修改。但是有進入 master 的程式碼有經過 QA 和 commiter 的驗證相對於較穩定,不太容易把程式碼弄很亂,通常是太久沒更新才會亂掉或是一次重構太多的程式碼

  • 方便做 code review,可以讓對議題有興趣的人了解程式碼是如何實作的,並且可以給出更好建議或討論做法

  • 開 PR 的程式碼有經過 QA 執行測試程式,可以避免掉一些不必要的 Bug。提高軟體的品質

以下來分享 Ohara 開 PR 的流程:

  1. 到 Ohara 的 github 裡,按下 fork 的按鈕,畫面如下:
    https://ithelp.ithome.com.tw/upload/images/20191013/20103456UjdKSU6xTU.png

  2. 當 fork 完之後,在 Browser 的 URL 上輸入以下的連結,確認 ohara 程式碼有 fork 成功:
    https://github.com/${YOUR_GITHUB_ACCOUNT}/ohara.git

  3. 把程式碼 clone 回本機,指令如下:

$git clone https://github.com/${YOUR_GITHUB_ACCOUNT}/ohara.git 
  1. 把 clone 回本機的 ohara 程式碼,和遠端 ohara repository 的程式碼進行同步的指令如下:
$ cd ohara
$ git remote add upstream https://github.com/oharastream/ohara.git
$ git fetch upstream
$ git rebase upstream/master
  1. 使用 gradle 指令進行 build 程式碼的動作,測試程式碼是否會有問題,如下指令:
$ gradle clean build -x test -PskipManager 

Build 完程式碼之後,可以把程式碼匯入到 IDE 裡面,如 Intellij,詳細做法可以參考 Day 16

  1. 如果對某些議題有興趣可以到 ohara 的 issue 裡去認領,或是想做某些議題可以開 issue 做討論的動作,如果有確定要做就把 issue number 當作程式碼的 branch name,ohara 的議題連結如下:
    https://github.com/oharastream/ohara/issues

畫面如下:
https://ithelp.ithome.com.tw/upload/images/20191013/20103456LnXBJw9YTj.png

如果對議題 2969 有興趣,就可以使用以下的指令來開 branch:

$ git checkout -b fix_2969 

branch 的名稱 ohara 規定不能只有 issue number 的數字,需要在 issue number 前面加上 prefix 的字串

  1. 這時侯就可以進行程式碼的開發或者是修改,改完程式碼之後一定要先跑單元測試以及以下幾個指令確認程式碼是能 compiler 以及 code style 沒問題:
$ gradle clean ohara-agent:test -PskipManager 
$ gradle spotlessCheck 
$ gradle licenseTest 

如果以上的指令都沒問題的話,就可以先把程式碼 push 到您的 github 帳號的 ohara repository 裡,指令如下:

$ git add -A . 
$ git commit -m "fix_${ISSUE_NUMBER}  大概描述一下改了什麼" 
$ git push origin master 
  1. 因為 ohara repository 的程式碼會有其它的開發者把程式碼合併到 master,所以在您的 repository 的 ohara 程式碼或是 local 的 ohara 程式碼都有可能是舊的,因此需要做更新的動作,指令如下:
$ git checkout master 
$ git fetch upstream 
$ git rebase upstream/master 
$ git push origin -f master 
$ git checkout ${YOUR_DEV_BRANCH} 
$ git rebase master 

以上的指令主要會切換到 master 裡面,然後去和遠端 ohara repository 的程式碼進行合併的動作,然後把合併完的程式碼推回到您的 ohara repository 裡,之後再去切換您開發 branch 的程式碼,然後和 master 的程式碼進行合併的動作。

Ohara 在合併程式碼時會規定要求使用 rebase,不能使用 git merge 指令這會讓支線變亂。

  1. 等程式碼都開發和修改完成,並且推到您的 repository 之後就可以進行開 PR(Pull Request) 的動作,畫面如下:
    https://ithelp.ithome.com.tw/upload/images/20191013/201034563DYjU7PLWN.png

選擇 Pull request -> New pull request 按鈕之後就可以開始建立 PR
https://ithelp.ithome.com.tw/upload/images/20191013/20103456ai0phnoxpU.png

compare across forks 連結就可以選擇要使用哪一個 repository 和 branch 來開 PR,畫面如下:
https://ithelp.ithome.com.tw/upload/images/20191013/2010345623P3ub9pmy.png

左邊選擇 ohara 的 repository 通常會使用 master branch,右邊的部份就要選擇您的帳號的 ohara repository,branch 選擇開發或修改程式碼的 branch 名稱,然後按下 Create pull request 的畫面如下:
https://ithelp.ithome.com.tw/upload/images/20191013/20103456Sih5iVgqyL.png

以上的畫面需要輸入 PR 的標題,Ohara 會要求標題的開頭是井字號後面放 issue number 例如是 #2926,之後再描述 issue 主要是在做什麼,通常會跟 issue 的標題一樣,然後選 Reviewers 和 Assignees, 按下 Create pull request 就可以完成開 PR 的動作了。

  1. 開完 PR 之後就會先等待 QA 把測試先跑過一次,有關於執行 QA 的方式可以參考 Day 27 並且等待 committer 把程式碼 reviewer 完畢,如果程式碼都沒問題之後就會把 PR 的程式碼合併到 Ohara repository 的 master 裡,然後議題會被 close 掉,這樣就完成開 PR 的流程了。

今天介紹開 PR (pull request) 部份和前二天介紹的 QA 和撰寫測試程式結合起來,會讓整個開發流程更加的順暢,使軟體的品質更加的穩定。


上一篇
Day 27 關於 Ohara 的 QA
下一篇
Day 29 關於 Ohara Release 的步驟
系列文
用30天介紹 open source 專案 Ohara 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言