gitlab多人協同工做html
本文爲亨利向《Git權威指南》的做者蔣鑫老師的答疑郵件寫成。
這裏特別感謝蔣鑫老師對我詢問gitlab的協同工做流程問題的詳細解答。
蔣鑫老師的細緻專業的解答讓我很是感動。
gitlab----新穎的git服務器託管網站,開源免費。你能夠在本身的公司或者開發團隊搭建好一個。
gitlab的工做流程是
gitlab help中建議的工做流程是這樣。以下圖。 git
(1).開發成員拷貝管理員創建好的項目到本身本地。vim
(2).建立本身的分支。服務器
(3).在本身的分支上寫代碼,並提交。gitlab
(4).推送到遠程服務器,分支是本身的分支。
(分支的命名規則使用小駝峯式命名法。好比我是員工孫悟空,我就推送到孫悟空分支。分支的命名規則爲開發人員姓名+所開發的功能。命名中不要使用特殊字符,不要使用點。
例如孫悟空開發的分支,命名爲swkFeature1)測試
(5).在Commit頁面上瀏覽分支。fetch
(6).建立一個合併請求。網站
(7).團隊的管理員或者領導者審查而且決定是否合併員工提交的分支到主分支上。
ui
管理員在建好的項目中加入開發人員。spa
開發人員有相應的權限級別,分爲Guest,Reporter,Developer,Master,等這幾個角色,這幾個角色的權限從低到高排列。
Developer可以推送和刪除沒有保護的分支,Master能夠對沒有保護和有保護的分支進行操做。如圖1所示。
Git 的開發者都喜歡以這種方式來開展工做,在master 分支中保留徹底穩定的代碼,即已經發布或即將發佈的代碼。
與此同時,他們還有一個名爲develop 專門用於後續的開發,或僅用於穩定性測試。固然並非說必定要絕對穩定,不過一旦進入某種穩定狀態,
即可以把它合併到master 裏。還有在工做中,把開發任務分解爲各個功能或者模塊,
用topic(topic branch主題分支,有又成爲feature branch特性分支),實現以後並測試穩定以後,能夠合併到其餘分支。
Git 的開發者都喜歡以這種方式來開展工做,在master 分支中保留徹底穩定的代碼,即已經發布或即將發佈的代碼。
與此同時,他們還有一個名爲develop分支 專門用於後續的開發,或僅用於穩定性測試。固然並非說必定要絕對穩定,
不過一旦進入某種穩定狀態,即可以把它合併到master 裏。
還有在工做中,把開發任務分解爲各個功能或者模塊,用topic分支(topic branch主題分支,有又稱爲feature branch特性分支),
好比實現功能1,在develop分支的基礎上產生分支feature1,實現功能2,有分支feature2。
feature1和feature2實現了要求的功能以後,合併到develop分支上去。develop分支測試穩定以後,能夠合併到master分支上去。
情景(如下的模擬場景沒有把develop分支考慮進去,直接在master分支上分解功能分支。)
1.管理員唐僧建好了一個項目,把孫悟空加入,並授予Developer角色權限,唐僧自己就是比孫悟空高一級的Master角色。唐僧在本身的電腦上設定好了master分支爲受保護分支。
2.員工孫悟空在本身電腦上工做,並推送已經寫好的代碼到遠程服務器的孫悟空分支上,即swkFeature1上
孫悟空作了以下操做
git clone git@mygitlabold.sytes.net:root/testc01.git //從管理員唐僧那裏克隆項目
cd testc01 //進入項目工做
git checkout -b swkFeature1 //建立本身的分支,並切換到此分支上,分支的命名規則爲開發人員名字+所開發的功能名字。本例中命名爲swk.feature1
vim aa.html //寫了一個名爲aa的html文件
git add aa.js //加入跟蹤
ggit commit -am "swkFeature1 is ready" //提交
git push origin swkFeature1 //推送到遠程服務器孫悟空分支上,git提示推送成功
git push origin swkFeature1:master //孫悟空想嘗試直接推送到受保護的分支上,孫悟空是沒有這個權限的,可是git提示爲推送失敗
圖爲孫悟空鍵入的命令
孫悟空在Commit頁面上瀏覽分支swkFeature1,而後向項目領導唐僧建立一個合併請求。
3.這個合併請求除了唐僧能夠登陸gitlab上看到以外,還能夠經過郵件方式看到。唐僧即便沒有登陸gitlab,只要他的郵箱支持手機郵箱等方式,
手機郵箱能夠經過短信的方式通知唐僧,唐僧能夠實時看到合併要求。
管理員唐僧對要求合併的分支代碼進行審覈。
管理員唐僧從服務器上獲取孫悟空提交的分支。
git fetch
而後孫悟空推送的遠程新分支被管理員唐僧拉拽到本地,可是不是以本地分支存在,
而是保存在 .git/refs/heads 以外(.git/refs/remotes/origin/之中)的遠程分支。
管理員唐僧能夠以下方法對孫悟空的分支進行審覈。
執行
git log master..origin/swkFeature1 //能夠看到孫悟空推送了幾個提交。
管理員唐僧能夠合併孫悟空的分支:
git merge origin/swkFeature1
管理員唐僧能夠逐一對孫悟空的提交審覈。若是發現有問題,管理員唐僧能夠本地回滾。
git reset --hard HEAD^ # 或 master@{1}
幾個反覆後,當孫悟空的分支審覈無誤,管理員唐僧將合併後的本地 master 分支推送到遠程服務器:
git push # 缺省 remote 爲 origin
圖 唐僧在本身的電腦上工做,審覈孫悟空提交的分支代碼,決定是否合併。
圖 唐僧鍵入的命令
這個時候,唐僧打開gitlab相應的項目,查看master分支的內容。發現服務器上面有了孫悟空提交的源代碼了。
唐僧能夠在那個請求頁面下關閉合並請求。gitlab合併請求有自動的功能,可是仍是須要管理員唐僧獲取下來,合併,測試是否有問題。不建議使用gitlab的自動合併功能。
合併請求就被關閉了。
4.孫悟空那邊。
孫悟空看到請求已經接受。
執行 git fetch 會獲取到更新的 master 分支。而後
git checkout master
git merge --ff origin/master
swkFeature1分支完成使命,刪掉吧: git branch -d swkFeature1
圖孫悟空後來鍵入的命令,圖中由於沒有切換到master分支上,因此又從新執行了一遍上述命令。