代碼懷孕了,誰(shuí)是父親?
![](http://image.woshipm.com/wp-files/img/37.jpg)
很多產(chǎn)品經(jīng)理可能一直以來(lái)有這樣一個(gè)疑問(wèn),這么多程序猿是怎么在一起擼代碼的啊?
- 方法一:每個(gè)人都只寫(xiě)一個(gè)獨(dú)立的模塊,堅(jiān)決不和其他程序猿有交集。(當(dāng)然,這是活在夢(mèng)里的想法)
- 方法二:一個(gè)程序猿改某個(gè)代碼文件的時(shí)候其他也需要改動(dòng)這個(gè)文件的程序猿先一邊涼快去,等改完了再上。(聽(tīng)起來(lái)有點(diǎn)對(duì)代碼進(jìn)行排隊(duì)輪x的意思啊…)
- 方法三:每個(gè)程序猿都按照自己的節(jié)奏改代碼,最后把修改合到一起。
聽(tīng)起來(lái),第三種方法比較靠譜,可是我們還需要依靠一個(gè)強(qiáng)大的文件版本管理工具才可以實(shí)現(xiàn)哦,這個(gè)就是svn。在開(kāi)始協(xié)同擼代碼前,需要在一個(gè)公共的主機(jī)上搭建svn的服務(wù)器,然后如同大廈奠基般需要?jiǎng)?chuàng)建一個(gè)svn的目錄,自此,所有程序猿寫(xiě)的代碼都需要提交到這個(gè)svn的目錄上面,同時(shí),所有程序員的代碼修改都要以svn服務(wù)器上的代碼為基準(zhǔn)。
程序猿在svn上擼代碼時(shí)有三個(gè)重要操作:更新,編輯沖突,提交。首先程序猿將服務(wù)器上的最新代碼更新到本地,然后以此代碼為基準(zhǔn)在本地開(kāi)始進(jìn)行自己的修改,當(dāng)自己修改的比較滿(mǎn)意后,會(huì)想要將這些本地的修改提交到服務(wù)器上,但是由于修改的這段時(shí)間,別的程序猿也可能提交了一些代碼,所以需要再次更新一下,看看這段時(shí)間別人修改的代碼和自己修改的部分有沒(méi)有沖突,這里svn提供了差異比對(duì)的功能,如果有相同部分的代碼被修改了,svn就會(huì)在更新的時(shí)候給出提示,需要程序猿對(duì)這些代碼修改沖突的地方進(jìn)行檢查并再次修改保證沒(méi)有沖突后,才可以提交代碼。(代碼提交高峰期可能出現(xiàn)一提交就沖突,剛修改完沖突,一提交又沖突,這個(gè)才郁悶?。?/p>
有的程序猿比較懶,會(huì)跳過(guò)更新,編輯沖突,直接進(jìn)行提交,如果運(yùn)氣好,提交的文件在這段時(shí)間別人都沒(méi)有修改過(guò),那么就沒(méi)有沖突,可以提交成功。但是如果提交的時(shí)候svn進(jìn)行比對(duì)發(fā)現(xiàn)有文件被別人修改過(guò)了,這個(gè)時(shí)候會(huì)強(qiáng)制提醒程序猿走一次更新,編輯沖突的流程。一旦提交成功,svn服務(wù)器便會(huì)詳細(xì)記錄此次提交,并遞增的分配一個(gè)版本號(hào)。
這里看到,svn有兩個(gè)重要的功能,文件提交記錄和文件修改比對(duì)。
程序猿們?cè)趨f(xié)同編碼的時(shí)候也會(huì)發(fā)生一些有趣的事情。一個(gè)人寫(xiě)代碼會(huì)有bug,幾個(gè)人同時(shí)寫(xiě)代碼那就更容易出bug了,這樣就會(huì)產(chǎn)生bug糾紛,就好比程序代碼被輪x了,懷孕了,現(xiàn)在要找父親了,可父親是誰(shuí)呢?被列為嫌疑犯的程序猿肯定都不希望孩子是自己的,不免會(huì)互相爭(zhēng)論一番。傳統(tǒng)解決方法就是慢慢調(diào)試,找到產(chǎn)生bug的相關(guān)代碼,然后讓寫(xiě)bug的程序猿去修復(fù)。但是讓誰(shuí)去調(diào)試bug呢,畢竟耗時(shí)又耗力?有人愿意擔(dān)當(dāng)還好,如果都覺(jué)得bug不是自己的不愿意去查bug,就又會(huì)陷入僵持了。這個(gè)時(shí)候svn就派上用場(chǎng)了:進(jìn)行代碼回退。svn服務(wù)器因?yàn)樵敿?xì)記錄了每次提交,所以它可以完整的回退到任意一個(gè)版本上,那么就可以不斷向前回退提交,然后運(yùn)行程序,就可以找到究竟是哪次提交產(chǎn)生了這個(gè)bug,從而確認(rèn)是哪個(gè)程序猿搞出來(lái)的bug。
同時(shí)根據(jù)這個(gè)理論,產(chǎn)生了bug追責(zé)究極大法-svn二分法,據(jù)說(shuō)被此法追責(zé)到的程序猿能繞地球一圈。怎么操作呢?例如回退到版本號(hào)100上沒(méi)有這個(gè)bug,回退到版本號(hào)200上有這個(gè)bug,那么就回退到版本號(hào)150上看看有沒(méi)有這個(gè)bug,如果有就繼續(xù)查版本號(hào)125,沒(méi)有就查版本號(hào)175,以此類(lèi)推,不斷縮小追查區(qū)間,最終一定能確定到某一個(gè)版本號(hào)對(duì)應(yīng)提交產(chǎn)生了這個(gè)bug,只要看看這個(gè)版本是誰(shuí)提交的可以知道是誰(shuí)的bug了。(當(dāng)然svn的功能可不僅僅是這些哦,有興趣的可以詳細(xì)把玩一下)
古代妃子侍寢的時(shí)候都會(huì)有太監(jiān)記錄,這樣日后懷孕了也可以推斷出是不是皇帝的。
歷史總是驚人的相似…
#專(zhuān)欄作家#
給產(chǎn)品經(jīng)理講技術(shù),微信公眾號(hào)(pm_teacher),人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家。資深程序猿,專(zhuān)注客戶(hù)端開(kāi)發(fā)若干年,對(duì)前端、后臺(tái)技術(shù)略懂,熱衷于對(duì)新的科技領(lǐng)域的探索。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,不得轉(zhuǎn)載。
真的很有意思哈哈哈
寫(xiě)的很有趣啊哈哈