Pull request 團(tuán)隊(duì)合作開(kāi)發(fā)使用詳解

今天和大家介紹一種團(tuán)隊(duì)開(kāi)發(fā)中代碼提交中使用的方法咽斧,主要是使用git命令和hg命令進(jìn)行代碼提交的方法,我們使用比較多的是github.comgitee.com洗贰、bitbucket.com這幾種代碼管理系統(tǒng)寄猩。我介紹的方法在這幾個(gè)系統(tǒng)中都可以使用嫉晶,只是有個(gè)別細(xì)節(jié)需要注意,我會(huì)在介紹的過(guò)程中提出來(lái)的田篇。首先來(lái)看一張我畫(huà)的示意圖替废。

Pull request示意圖

應(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)的麻煩血当。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市禀忆,隨后出現(xiàn)的幾起案子臊旭,更是在濱河造成了極大的恐慌,老刑警劉巖箩退,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件离熏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡戴涝,警方通過(guò)查閱死者的電腦和手機(jī)滋戳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)啥刻,“玉大人胧瓜,你說(shuō)我怎么就攤上這事≈J玻” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵蒲肋,是天一觀的道長(zhǎng)蘑拯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)兜粘,這世上最難降的妖魔是什么申窘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮孔轴,結(jié)果婚禮上剃法,老公的妹妹穿的比我還像新娘。我一直安慰自己路鹰,他們只是感情好贷洲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著晋柱,像睡著了一般优构。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雁竞,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天钦椭,我揣著相機(jī)與錄音,去河邊找鬼。 笑死彪腔,一個(gè)胖子當(dāng)著我的面吹牛侥锦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播德挣,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼恭垦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了盲厌?” 一聲冷哼從身側(cè)響起署照,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吗浩,沒(méi)想到半個(gè)月后建芙,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懂扼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年禁荸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阀湿。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赶熟,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出陷嘴,到底是詐尸還是另有隱情映砖,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布灾挨,位于F島的核電站邑退,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏劳澄。R本人自食惡果不足惜地技,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秒拔。 院中可真熱鬧莫矗,春花似錦、人聲如沸砂缩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梯轻。三九已至食磕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喳挑,已是汗流浹背彬伦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工滔悉, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人单绑。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓回官,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親搂橙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子歉提,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 3,918評(píng)論 0 11
  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照区转,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)苔巨。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 15,883評(píng)論 5 147
  • 海信博納SMART智能冰箱 核心提示: 海信博納SMART智能冰箱废离,搭載物聯(lián)云服務(wù)侄泽,引入全新的食品管理功能,為您及...
    愛(ài)林汀閱讀 965評(píng)論 0 0
  • 你會(huì)發(fā)現(xiàn)自己并不孤獨(dú)蜻韭,這個(gè)世界上有比你更早感受痛苦的人悼尾,而且他們把這些感受切實(shí)描述了出來(lái),在那些文字中自己去感受去...
    _一木閱讀 4,740評(píng)論 0 5
  • “如講到“有朋自遠(yuǎn)方來(lái)肖方,不亦樂(lè)乎”闺魏,徒兒們以為遠(yuǎn)道來(lái)了朋友,孔子高興俯画,而老汪說(shuō)高興個(gè)啥呀析桥,恰恰是圣人傷了心,如果身...
    嗷嗚大王是也閱讀 275評(píng)論 0 2