Git Repo的介紹

Git:可以管理多個projectrepositories,進行版本控制之用

Repo:由於Android是由多個project所組成,因為為了管理眾多的git repositories,由Google所開發的一個工具。

Gerrit:是一個web-basecode review系統,且用於git上。簡單說,就是給使用gitproject的雲端code review伺服器。

  1. 因此在Android工作的基本流程為
    1. repo開啟一個新的branch
    2. 編輯檔案
    3. git commit來編輯
    4. repo upload 來上傳至Gerrit Code Review Server.

 

 

fast-forward:在Git是一種術語,假設現在有兩個branch(A and B)B是從A分支出來的,當B的功能完成後要mergeA時,因為Bparent commitAhead。所以兩個branch的差異只有B後來所新增的commit而已,因此前面的commit理論上不會有confilict的問題,所以可視為都在同一條線上,此謂fast-forward

  1. 主分支(main branches)
    • 每個response都會有個master develop兩個branch
    • master代表程式碼屬於ready的狀態
    • developHEAD來自於master,並對其進行開發,這些變更最後會push更新至主線
    • develop程式穩定準備push時,所有變更應當mergemaster
  2. 輔助分支(supporting branches)
    • 準備產品的發佈、解Bug,用於減輕trace的困擾
    • 這些branch生命周期有限,當用完後(exbug解決後)就會將其移除
    • 通常會有三種類型的branch
      1. 特性分支(Feature branches)
      2. 發佈分支(Release branches)
      3. 快速修復分支(Hotfix branches)
  3. 特性分支(Feature branches)
  • 可能啟源於develop,最後完成後依然需merge回去
  • 命名規則:除masterdeveloprelease-* 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的歷史訊息中,是看不出這些developfeature的關聯,但是加上--no-ff後便能做到。
  1. 發佈分支(Release branches)
  • 啟源於develop,最後要併回developmaster
  • 命名規則: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
  1. 快速修復分支(Hotfix branches)
  • 啟源於master,最後要併回developmaster
  • 命名規則:hotfix-*
  • branchrelease很像, 一樣都是為了發佈產品前做準備。
  • 主要目的是在解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以及developbranch
  • 首先需為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).

 

文章標籤
全站熱搜
創作者介紹
創作者 y23462001 的頭像
y23462001

y23462001的部落格

y23462001 發表在 痞客邦 留言(0) 人氣(267)