一、基本概念
1.倉庫(Repository)
①源倉庫(線上版本庫)
在項目的開始,項目的發起者構建起一個項目的最原始的倉庫,稱為origin。
源倉庫的有兩個作用:
1.匯總參與該項目的各個開發者的代碼
2.存放趨於穩定和可發布的代碼
源倉庫應該是受保護的,開發者不應該直接對其進行開發工作。只有項目管理者能對其進行較高權限的操作。
②開發者倉庫(本地倉庫)
任何開發者都不會對源倉庫進行直接的操作,源倉庫建立以后,每個開發者需要做的事情就是把源倉庫的“復制”一份,作為自己日常開發的倉庫。這個復制是gitlab上面的fork
。
每個開發者所fork的倉庫是完全獨立的,互不干擾,甚至與源倉庫都無關。每個開發者倉庫相當於一個源倉庫實體的影像,開發者在這個影像中進行編碼,提交到自己的倉庫中,這樣就可以輕易地實現團隊成員之間的並行開發工作。而開發工作完成以后,開發者可以向源倉庫
發送pull request,
請求管理員把自己的代碼合並到源倉庫中,這樣就實現了分布式開發工作和集中式的管理。
2.分支(Branch)
①master branch:主分支
master:主分支從項目一開始便存在,它用於存放經過測試,已經完全穩定代碼;在項目開發以后的任何時刻當中,master
存放的代碼應該是可作為產品供用戶使用的代碼。所以,應該隨時保持master
倉庫代碼的清潔和穩定,確保入庫之前是通過完全測試和代碼reivew
的
。master
分支是所有分支中最不活躍的,大概每個月或每兩個月更新一次,每一次master
更
新的時候都應該用git
打上tag
,來說明產品有新版本發布。
②develop branch:開發分支
develop:開發分支,一開始從master
分支中分離出來,用於開發者存放基本穩定代碼。每個開發者的倉庫相當於源倉庫的一個鏡像,每個開發者自己的倉庫上也有master
和develop
。開發者把功能做好以后,是存放到自己的develop
中,當測試完以后,可以向管理者
發起一個pull request
,請求把自己倉庫的develop
分支合並到源倉庫的develop
中。所有開發者開發好的功能會在源倉庫的develop
分支中進行匯總,當develop
中的代碼經過不斷的測試,已經逐漸趨於穩定了,接近產品目標了。這時候,就可以把develop
分支合並
到master
分支中,發布一個新版本。
注:任何人不應該向master
直接進行無意義的合並、提交操作。正常情況下,master
只應該接受develop
的合並,也就是說,master
所有代碼更新應該源於合並develop
的代碼。
③feature branch:功能分支
feature:功能性分支,是用於開發項目的功能的分支,是開發者主要戰斗陣地。開發者在本地倉庫從develop
分支分出功能分支,在該分支上進行功能的開發,開發完成以后再合並到develop
分支上,這時候功能性分支已經完成任務,可以刪除。功能性分支的命名一般
為feature-*
,*
為需要開發的功能的名稱。
二、如何操作(僅做舉例說明用)
Step 1:源倉庫的構建
這一步通常由項目發起人(項目管理員)來操作,源倉庫為op/Chanjet_Asset_Management,並初始化兩個分支master和develop.
Step 2:開發者fork源倉庫
源倉庫建立以后,每個開發就可以去復制一份源倉庫到自己的gitlab賬號中,然后作為自己開發所用的倉庫。假設我是一個項目中的開發者,我就到op/Chanjet_Asset_Managemen項目主頁上去fork.
Step 3:把自己開發者倉庫clone到本地
>>> git clone http://gitlab.rd.chanjet.com/op/Chanjet_Asset_Management.git
Step 4:構建功能分支進行開發
假設現在要開發一個“討論”功能:
>>> git checkout develop
# 切換到`develop`分支
>>> git checkout -b feature-discuss
# 分出一個功能性分支
>>> touch discuss.py
# 假裝discuss.py就是我們要開發的功能
>>> git
add.
>>> git commit -m
'finish discuss feature'
# 提交更改,多次測試以后
>>> git checkout develop
# 回到develop分支
>>> git
merge--no-ff feature-discuss
# 把做好的功能合並到develop中
>>> git branch -d feature-discuss
# 刪除功能性分支
>>> git push origin develop
# 把develop提交到自己的遠程倉庫中
此時,上自己gitlab的項目主頁中develop
分支中查看,已經有discuss.py
這個文件了:
Step 5:向管理員提交pull request
在完成了“討論”功能(當然,也可能對自己的develop
進行了多次合並,完成了多個功能),經過測試以后,覺得沒問題,就可以請求管理員把自己倉庫的develop
分支合並到源倉庫的develop
分支中。
Step 6 管理員測試、合並
管理員登陸gitlab
,看到了開發者對源倉庫發起的pull request
。
管理員需要做的事情就是:
1.
對開發者的代碼進行review
。
2.在他的本地測試新建一個測試分支,測試開發者的代碼:
>>> git checkout develop
# 進入管理員本地的develop分支
>>> git checkout -b manager-develop
# 從develop分支中分出一個叫manager-develop的測試分支測試開發者的代碼
>>> git pull
http://gitlab.rd.chanjet.com/op/Chanjet_Asset_Management.git develop
# 把開發者的代碼pull到測試分支中,進行測試
判斷是否同意合並到源倉庫的develop
中,如果經過測試沒問題,可以把開發者的代碼合並到源倉庫的develop
中:
>>> git checkout develop
>>> git
merge--no-ff manager-develop
>>> git push origin develop
注:管理員一直在操作的倉庫是源倉庫。
以上,就是一個git
和gitlab
協同工作流的基本步驟。