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 的流程:
到 Ohara 的 github 裡,按下 fork 的按鈕,畫面如下:
當 fork 完之後,在 Browser 的 URL 上輸入以下的連結,確認 ohara 程式碼有 fork 成功:
https://github.com/${YOUR_GITHUB_ACCOUNT}/ohara.git
把程式碼 clone 回本機,指令如下:
$git clone https://github.com/${YOUR_GITHUB_ACCOUNT}/ohara.git
$ cd ohara
$ git remote add upstream https://github.com/oharastream/ohara.git
$ git fetch upstream
$ git rebase upstream/master
$ gradle clean build -x test -PskipManager
Build 完程式碼之後,可以把程式碼匯入到 IDE 裡面,如 Intellij,詳細做法可以參考 Day 16
畫面如下:
如果對議題 2969 有興趣,就可以使用以下的指令來開 branch:
$ git checkout -b fix_2969
branch 的名稱 ohara 規定不能只有 issue number 的數字,需要在 issue number 前面加上 prefix 的字串
$ 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
$ 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 指令這會讓支線變亂。
選擇 Pull request -> New pull request 按鈕之後就可以開始建立 PR
compare across forks 連結就可以選擇要使用哪一個 repository 和 branch 來開 PR,畫面如下:
左邊選擇 ohara 的 repository 通常會使用 master branch,右邊的部份就要選擇您的帳號的 ohara repository,branch 選擇開發或修改程式碼的 branch 名稱,然後按下 Create pull request 的畫面如下:
以上的畫面需要輸入 PR 的標題,Ohara 會要求標題的開頭是井字號後面放 issue number 例如是 #2926,之後再描述 issue 主要是在做什麼,通常會跟 issue 的標題一樣,然後選 Reviewers 和 Assignees, 按下 Create pull request 就可以完成開 PR 的動作了。
今天介紹開 PR (pull request) 部份和前二天介紹的 QA 和撰寫測試程式結合起來,會讓整個開發流程更加的順暢,使軟體的品質更加的穩定。