在項目的開始,項目的發起者構建起一個項目的最原始的倉庫,稱爲origin。
git
源倉庫的有兩個做用:分佈式
1.彙總參與該項目的各個開發者的代碼gitlab
2.存放趨於穩定和可發佈的代碼 測試
源倉庫應該是受保護的,開發者不該該直接對其進行開發工做。只有項目管理者能對其進行較高權限的操做。編碼
任何開發者都不會對源倉庫進行直接的操做,源倉庫創建之後,每一個開發者須要作的事情就是把源倉庫的「複製」一份,做爲本身平常開發的倉庫。這個複製是gitlab上面的fork
。code
每一個開發者所fork的倉庫是徹底獨立的,互不干擾,甚至與源倉庫都無關。每一個開發者倉庫至關於一個源倉庫實體的影像,開發者在這個影像中進行編碼,提交到本身的倉庫中,這樣就能夠輕易地實現團隊成員之間的並行開發工做。而開發工做完成之後,開發者能夠向源倉庫項目管理
發送pull request,
請求管理員把本身的代碼合併到源倉庫中,這樣就實現了分佈式開發工做和集中式的管理。開發
master:主分支從項目一開始便存在,它用於存放通過測試,已經徹底穩定代碼;在項目開發之後的任什麼時候刻當中,master
存放的代碼應該是可做爲產品供用戶使用的代碼。因此,應該隨時保持master
倉庫代碼的清潔和穩定,確保入庫以前是經過徹底測試和代碼reivew
工作流
的
。master
分支是全部分支中最不活躍的,大概每月或每兩個月更新一次,每一次master
更
新的時候都應該用git
打上tag
,來講明產品有新版本發佈。產品
develop:開發分支,一開始從master
分支中分離出來,用於開發者存放基本穩定代碼。每一個開發者的倉庫至關於源倉庫的一個鏡像,每一個開發者本身的倉庫上也有master
和develop
。開發者把功能作好之後,是存放到本身的develop
中,當測試完之後,能夠向管理者
發起一個pull request
,請求把本身倉庫的develop
分支合併到源倉庫的develop
中。全部開發者開發好的功能會在源倉庫的develop
分支中進行彙總,當develop
中的代碼通過不斷的測試,已經逐漸趨於穩定了,接近產品目標了。這時候,就能夠把develop
分支合併
到master
分支中,發佈一個新版本。
注:任何人不該該向master
直接進行無心義的合併、提交操做。正常狀況下,master
只應該接受develop
的合併,也就是說,master
全部代碼更新應該源於合併develop
的代碼。
feature:功能性分支,是用於開發項目的功能的分支,是開發者主要戰鬥陣地。開發者在本地倉庫從develop
分支分出功能分支,在該分支上進行功能的開發,開發完成之後再合併到develop
分支上,這時候功能性分支已經完成任務,能夠刪除。功能性分支的命名通常
爲feature-*
,*
爲須要開發的功能的名稱。
這一步一般由項目發起人(項目管理員)來操做,源倉庫爲op/Chanjet_Asset_Management,並初始化兩個分支master和develop.
源倉庫創建之後,每一個開發就能夠去複製一份源倉庫到本身的gitlab帳號中,而後做爲本身開發所用的倉庫。假設我是一個項目中的開發者,我就到op/Chanjet_Asset_Managemen項目主頁上去fork.
>>> git clone http://gitlab.rd.chanjet.com/op/Chanjet_Asset_Management.git
假設如今要開發一個「討論」功能:
>>> git checkout develop
# 切換到`develop`分支
>>> git checkout -b feature-discuss
# 分出一個功能性分支
>>> touch discuss.py
# 僞裝discuss.py就是咱們要開發的功能
add >>> git.
'finish discuss feature' >>> git commit -m
# 提交更改,屢次測試之後
>>> git checkout develop
# 回到develop分支
merge--no-ff feature-discuss >>> git
# 把作好的功能合併到develop中
>>> git branch -d feature-discuss
# 刪除功能性分支
>>> git push origin develop
# 把develop提交到本身的遠程倉庫中
此時,上本身gitlab的項目主頁中develop
分支中查看,已經有discuss.py
這個文件了:
develop
進行了屢次合併,完成了多個功能),通過測試之後,以爲沒問題,就能夠請求管理員把本身倉庫的develop
分支合併到源倉庫的develop
分支中。管理員登錄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
merge--no-ff manager-develop >>> git
>>> git push origin develop
注:管理員一直在操做的倉庫是源倉庫。
以上,就是一個git
和gitlab
協同工做流的基本步驟。