Git 和 Repo的介紹
Git:可以管理多個project的repositories,進行版本控制之用
Repo:由於Android是由多個project所組成,因為為了管理眾多的git repositories,由Google所開發的一個工具。
Gerrit:是一個web-base的code review系統,且用於git上。簡單說,就是給使用git的project的雲端code review伺服器。
- 因此在Android工作的基本流程為
- 用repo開啟一個新的branch
- 編輯檔案
- 用git commit來編輯
- 用repo upload 來上傳至Gerrit Code Review Server.
fast-forward:在Git是一種術語,假設現在有兩個branch(A and B),B是從A分支出來的,當B的功能完成後要merge回A時,因為B的parent commit是A的head。所以兩個branch的差異只有B後來所新增的commit而已,因此前面的commit理論上不會有confilict的問題,所以可視為都在同一條線上,此謂fast-forward。
- 主分支(main branches)
- 每個response都會有個master 和 develop兩個branch
- master代表程式碼屬於ready的狀態
- develop其HEAD來自於master,並對其進行開發,這些變更最後會push更新至主線
- 當develop程式穩定準備push時,所有變更應當merge回master
- 輔助分支(supporting branches)
- 準備產品的發佈、解Bug,用於減輕trace的困擾
- 這些branch生命周期有限,當用完後(ex:bug解決後)就會將其移除
- 通常會有三種類型的branch
- 特性分支(Feature branches)
- 發佈分支(Release branches)
- 快速修復分支(Hotfix branches)
- 特性分支(Feature branches)
- 可能啟源於develop,最後完成後依然需merge回去
- 命名規則:除master、develop、release-* 或hotfix-* 外的任何名字
- 通常用於之後版本開發新功能之用,直到需要時再併回develop
- 基本上此分支只會存在於開發者身上
- 併回develop的方式
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
- 標記 --no-ff的目的,是在fast-forward條件下,合併的操作仍是產生一個commit,可以避免feature branch的訊息遺失。
- 由於從git的歷史訊息中,是看不出這些develop和feature的關聯,但是加上--no-ff後便能做到。
- 發佈分支(Release branches)
- 啟源於develop,最後要併回develop和master
- 命名規則:release-*
- Release目的在於做新產品發佈前的準備,簡單講就是解決小bug或發佈前所需的資料。
- 從develop建立出release的分支,其時機代表develop branch已經處於ready的狀態,此時所有的feature應該都已經併回develop。
- 當release發佈後,其版本號才會產生。
- 假設版號已確定是1.2則範例如下:
$ git checkout -b release-1.2 develop
Switched to a new branch "release-1.2"
$ ./bump-version.sh 1.2
Files modified successfully, version bumped to 1.2.
$ git commit -a -m "Bumped version number to 1.2"
[release-1.2 74d9424] Bumped version number to 1.2
1 files changed, 1 insertions(+), 1 deletions(-)
- 當release已經符合發佈的要求,release將要併回master
- Master應要打上tag,方便以後引用這個歷史版本
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2
- 要保持我們在release的修改,也需要併回develop中
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff release-1.2
Merge made by recursive.
(Summary of changes)
- 完成以上步驟後,便可移除release
- 快速修復分支(Hotfix branches)
- 啟源於master,最後要併回develop和master
- 命名規則:hotfix-*
- 此branch和release很像, 一樣都是為了發佈產品前做準備。
- 主要目的是在解Bug,且即需立即解決的情況
- Hotfix分支從master分支中創建。例如,假定1.2是當前已經發布的產品,卻由於嚴重的bug導致了問題。
$ git checkout -b hotfix-1.2.1 master
Switched to a new branch "hotfix-1.2.1"
$ ./bump-version.sh 1.2.1
Files modified successfully, version bumped to 1.2.1.
$ git commit -a -m "Bumped version number to 1.2.1"
[hotfix-1.2.1 41e61bb] Bumped version number to 1.2.1
1 files changed, 1 insertions(+), 1 deletions(-)
- 當Bug解掉之後,要將這邊的修改合併回master以及develop的branch
- 首先需為master打上tag註記,和release很像
$ git checkout master
Switched to branch 'master'
$ git merge --no-ff hotfix-1.2.1
Merge made by recursive.
(Summary of changes)
$ git tag -a 1.2.1
- 同上,也併回develop branch中
- 最後則刪除該Hotfix branch
$ git branch -d hotfix-1.2.1
Deleted branch hotfix-1.2.1 (was abbe5d6).
文章標籤
全站熱搜
