今天和大家介紹一種團(tuán)隊(duì)開(kāi)發(fā)中代碼提交中使用的方法咽斧,主要是使用git命令和hg命令進(jìn)行代碼提交的方法,我們使用比較多的是github.com
、gitee.com
洗贰、bitbucket.com
這幾種代碼管理系統(tǒng)寄猩。我介紹的方法在這幾個(gè)系統(tǒng)中都可以使用嫉晶,只是有個(gè)別細(xì)節(jié)需要注意,我會(huì)在介紹的過(guò)程中提出來(lái)的田篇。首先來(lái)看一張我畫(huà)的示意圖替废。
應(yīng)用場(chǎng)景
我們有一個(gè)項(xiàng)目叫project,存在公司的主倉(cāng)庫(kù)中泊柬,現(xiàn)在我們有多個(gè)人對(duì)這個(gè)項(xiàng)目做協(xié)作開(kāi)發(fā)椎镣,project
項(xiàng)目中有兩個(gè)分支online
(線上分支)和test
(測(cè)試分支),online
分支是需要部署到生產(chǎn)環(huán)境的兽赁,test
分支是用于測(cè)試環(huán)境的状答,我們的上線流程是,代碼一定要經(jīng)過(guò)測(cè)試通過(guò)后才能上線闸氮。對(duì)于一個(gè)新的需求做開(kāi)發(fā)剪况,我們可能對(duì)這個(gè)項(xiàng)目做一個(gè)或多個(gè)功能的開(kāi)發(fā),每個(gè)人分到一個(gè)或多個(gè)功能做開(kāi)發(fā),這個(gè)過(guò)程中需要注意,如何做到多人開(kāi)發(fā)碴开,代碼同步推沸,如何進(jìn)行測(cè)試悟耘,如何解決代碼沖突票唆,還有就是如何做code review
等等缕探,針對(duì)以上的問(wèn)題缅疟,我們做以下的操作步驟翎蹈。
操作步驟
1淮菠、在公司的主倉(cāng)庫(kù)中存在project
項(xiàng)目,項(xiàng)目中含有online
分支和test
分支
2荤堪、首先Fork
主倉(cāng)庫(kù)中的project
項(xiàng)目到自己的倉(cāng)庫(kù)中合陵。如何Fork
請(qǐng)自行查找。
3澄阳、從自己的倉(cāng)庫(kù)中clone
項(xiàng)目到本地倉(cāng)庫(kù)拥知,查看本地倉(cāng)庫(kù)是否含有online
分支和test
分支
4、修改git
命令或是hg
命令的配置文件碎赢,建立與本地倉(cāng)庫(kù)與主倉(cāng)庫(kù)的聯(lián)系
git命令:修改git的cong文件(.git/config)增加如下內(nèi)容
[remote "main"] # main 為主倉(cāng)庫(kù)的名字低剔,這個(gè)隨便起,看自己的習(xí)慣
url = "替換為主倉(cāng)庫(kù)的clone地址"
fetch = +refs/heads/*:refs/remotes/origin/*
hg命令:修改hg的cong文件(.hg/hgrc)增加如下內(nèi)容
[paths]
default = "默認(rèn)的" # 這個(gè)不需要修改肮塞,也不要?jiǎng)h除襟齿,一定要保留
main = "主倉(cāng)庫(kù)的clone地址"
5、以上就建立完了本地倉(cāng)庫(kù)與主倉(cāng)庫(kù)和自己的倉(cāng)庫(kù)的聯(lián)系枕赵,接下來(lái)我詳解一下一個(gè)新功能(如用戶列表)的開(kāi)發(fā)流程
6猜欺、首先進(jìn)入項(xiàng)目目錄,切換到online
分支烁设,并拉取主倉(cāng)庫(kù)online
分支的最新代碼到本地倉(cāng)庫(kù)替梨,與本地倉(cāng)庫(kù)的online
分支合并。操作如下
git命令
$ git checkout online
$ git pull main online
hg命令
$ hg up online
$ hg pull main
$ hg up
7装黑、基于當(dāng)前的online
分支創(chuàng)建一個(gè)功能分支副瀑,分支的名字最好和功能有關(guān)系,最好加上一個(gè)前綴恋谭,表明身份糠睡,如我的花名叫白起,我創(chuàng)建一個(gè)用戶列表的功能分支為:bai_user_list
.
關(guān)于創(chuàng)建分支疚颊,這里就要多說(shuō)一點(diǎn)了狈孔,為什么要這樣創(chuàng)建分支
(1)、因?yàn)槲覀兯虚_(kāi)發(fā)的功能最終都要上線的材义,所以一定要基于online建分支均抽,建分支前先把最新的online分支代碼拉取下來(lái)并合并
(2)、建立分支一定要與功能有關(guān)系其掂,盡量以功能為名稱油挥,因?yàn)橛袝r(shí)開(kāi)發(fā)的功能多了,就忘了哪個(gè)分支對(duì)應(yīng)哪個(gè)功能了
(3)、為什么要加前綴深寥,這個(gè)是因?yàn)槎嗳碎_(kāi)發(fā)的過(guò)程中可能有很多相同的功能開(kāi)發(fā)攘乒,這樣就能區(qū)分相同功能都有誰(shuí)來(lái)開(kāi)發(fā)了,還有在切換分支的時(shí)候只要輸入前綴惋鹅,然后使用雙tab鍵就能列出所有以這個(gè)前綴開(kāi)頭的分支则酝,也就知道自己開(kāi)發(fā)了哪些分支了
(4)、因?yàn)橐詇g(mercurial)管理的代碼系統(tǒng)闰集,里面只有一個(gè)主分支沽讹,其他的分支都是在主分支上建立的節(jié)點(diǎn),pull永遠(yuǎn)都是對(duì)所有分支做拉取返十、push永遠(yuǎn)是對(duì)本地的所有分子做提交妥泉。這樣在主倉(cāng)庫(kù)那里查看分支的話就會(huì)有好多分支,查找和管理起來(lái)比較混亂洞坑。而git管理的代碼系統(tǒng)的每個(gè)分支都是相對(duì)獨(dú)立的,pull可以拉取指定的分支蝇率,push也是提交指定的分支迟杂,這樣主倉(cāng)庫(kù)永遠(yuǎn)只有online和test分支。其實(shí)我們開(kāi)發(fā)的功能分支只要合并到online上就沒(méi)有保留的必要了本慕。所以也需要?jiǎng)h除排拷,git能做到刪除分支,但是hg卻做不到刪除分支锅尘,只能關(guān)閉分支
git命令
$ git checkout online
$ git checkout -b bai_user_list
hg命令
$ hg up online
$ hg branch bai_user_list
$ hg ci -m "創(chuàng)建用戶列表功能分支" # 這里一定要做一次提交监氢,如果不做提交,修改完切換分支藤违,會(huì)把內(nèi)容丟失浪腐,切記!顿乒!
8议街、我們到bai_user_list
分支上就可以開(kāi)始我們的開(kāi)發(fā)工作了,在這個(gè)分支上我們可以做多次提交璧榄,這里的提交不會(huì)影響到其他分支特漩,等我們開(kāi)發(fā)完了進(jìn)入下一步提交測(cè)試
9、開(kāi)發(fā)完成提交測(cè)試骨杂,需要把bai_user_list
合并到test
分支涂身,首先切換到test
分支,并拉取最新的代碼搓蚪,然后再merge
分支
git命令
$ git checkout test
$ git pull main test # 這個(gè)拉取主倉(cāng)庫(kù)test分支的代碼到本地蛤售,并與本地代碼合并
$ git merge bai_user_list --squash # 這個(gè)--squash參數(shù)很重要,它把bai_user_list分支中的多次提交合并成一次提交,合并到test分支上
$ git status # 這個(gè)地方也許有沖突悍抑,那么就解決沖突
$ git commit -am "測(cè)試" # 一定要做commit提交
$ git push # 這個(gè)就提交到了自己倉(cāng)庫(kù)中的test分支上了
hg命令
$ hg update test
$ hg pull main # 這個(gè)拉取主倉(cāng)庫(kù)的代碼到本地
$ hg up # 合并遠(yuǎn)程倉(cāng)庫(kù)的代碼
$ hg merge bai_user_list # 合并分支
$ hg st # 查看是否有沖突鳄炉,并解決沖突
$ hg ci -m "測(cè)試" # 一定要做commit提交
$ hg push # 這個(gè)就提交到了自己倉(cāng)庫(kù)中的test分支上了
10、提交到自己的倉(cāng)庫(kù)之后就需要?jiǎng)?chuàng)建pull request
搜骡,一定是自己倉(cāng)庫(kù)中test
分支到主倉(cāng)庫(kù)test
分支的pull request
拂盯。pull request
的操作就不詳細(xì)說(shuō)了自行查找一下就行了,很簡(jiǎn)單的操作记靡。
11谈竿、提交完pull request
之后,需要有一個(gè)有管理權(quán)限的人把此次pull request
合并到主倉(cāng)庫(kù)上摸吠,這個(gè)地方可以進(jìn)行code review
空凸,如果發(fā)現(xiàn)代碼有問(wèn)題,可以不做合并寸痢,通知開(kāi)發(fā)人員修改呀洲,之后再提交。審核通過(guò)后就可以合并代碼了啼止,合并之后就可以就行代碼測(cè)試了道逗。
12、測(cè)試的過(guò)程中可能有很多bug
献烦,需要反復(fù)修改這樣只需要重復(fù)8滓窍、9步驟,直到通過(guò)測(cè)試巩那。
13吏夯、測(cè)試通過(guò)之后需要上線,我們只需要依據(jù)第9步即横,把分支換成online
就行了噪生,操作不知如下:
git命令
$ git checkout online
$ git pull main online # 這個(gè)拉取主倉(cāng)庫(kù)online分支的代碼到本地,并與本地代碼合并
$ git merge bai_user_list --squash # 這個(gè)--squash參數(shù)很重要令境,它把bai_user_list分支中的多次提交合并成一次提交杠园,合并到online分支上
$ git status # 這個(gè)地方也許有沖突,那么就解決沖突
$ git commit -am "上線" # 一定要做commit提交
$ git push # 這個(gè)就提交到了自己倉(cāng)庫(kù)中的online分支上了
hg命令
$ hg update online
$ hg pull main # 這個(gè)拉取主倉(cāng)庫(kù)的代碼到本地
$ hg up # 合并遠(yuǎn)程倉(cāng)庫(kù)的代碼
$ hg merge bai_user_list # 合并分支
$ hg st # 查看是否有沖突舔庶,并解決沖突
$ hg ci -m "上線" # 一定要做commit提交
$ hg push # 這個(gè)就提交到了自己倉(cāng)庫(kù)中的online分支上了
14抛蚁、提交到online分支之后就可以發(fā)送pull request操作了,創(chuàng)建自己倉(cāng)庫(kù)中的online分支到主倉(cāng)庫(kù)的online的pull request惕橙,然后通知管理員合并分支并上線
15瞧甩、上線完成之后我們本地創(chuàng)建的功能分支bai_user_list
分支需要?jiǎng)h除。一定要?jiǎng)h除弥鹦,表明這個(gè)功能已經(jīng)開(kāi)發(fā)完成肚逸。
git命令
$ git checkout online
$ git branch -d bai_user_list # 刪除本地分支
hg命令
$ hg update bai_user_list
$ hg ci -m "上線" --close # hg不能刪除分支爷辙,只能關(guān)閉分支
以上就是團(tuán)隊(duì)開(kāi)發(fā)的詳細(xì)流程,整個(gè)過(guò)程都能用上面的圖來(lái)說(shuō)明朦促,綠色的箭頭我們只進(jìn)行一次操作膝晾,紅色的箭頭是我們經(jīng)常進(jìn)行的操作,希望大家熟練掌握务冕,減少在開(kāi)發(fā)中因?yàn)樘峤淮a帶來(lái)的麻煩血当。