SVN淺析

SVN衔沼,一個版本控制系統(tǒng),用于團(tuán)隊(duì)協(xié)作開發(fā)责静。

版本控制:

標(biāo)記不同的版本需要使用編號墨缘,SVN使用Revision來作為版本編號星虹。
Revision是一個隨著提交遞增且唯一的自然數(shù),每次新的提交Revision都會加一镊讼。
Revision應(yīng)用于整個倉庫宽涌,不只在單個文件上生效。(修改了倉庫中一個文件蝶棋,提交之后其實(shí)整個倉庫Revision都增加了卸亮,每個Revision可以理解為整個倉庫在某次提交之后的快照。)

協(xié)作:

協(xié)作開發(fā)需要關(guān)注問題就是多人修改同一個文件時如何保證修改正確的合并起來玩裙。File Sharing和Lock-Modify-Unlock模式都有各自的缺陷兼贸,SVN使用的Copy-Modify-Merge模式很好的解決了這個問題段直,如下是對三種模式的介紹。

File Sharing寝受,會有操作覆蓋的問題坷牛。
Lock-Modify-Unlock罕偎,同時只能有一個人在讀寫很澄,影響協(xié)作效率。
Copy-Modify-Merge颜及,SVN采用的模式甩苛,不會有覆蓋的問題,且不影響相互的工作進(jìn)度俏站。

版本管理

SVN常用于代碼版本管理讯蒲,常用的版本管理模型分為兩種。

主線開發(fā)模型:
  1. 在trunk上進(jìn)行版本開發(fā)
  2. 版本完成開發(fā)并測試通過肄扎,準(zhǔn)備發(fā)布墨林,從trunk copy 一個release分支出來進(jìn)行發(fā)布。
  3. 新版本繼續(xù)在trunk上進(jìn)行開發(fā)犯祠,重復(fù)步驟1和2
  4. 如果有一些特殊的功能模塊需要獨(dú)立開發(fā)(比如可能無法和版本一起上線)旭等,從trunk上copy Feature Branch進(jìn)行開發(fā),完成開發(fā)后merge 回 trunk 進(jìn)行發(fā)布衡载。

使用場景:維護(hù)人員較少搔耕,定期發(fā)布,團(tuán)隊(duì)成員一般都是一起做一個版本的功能痰娱,且同時發(fā)布弃榨。

release主線,功能分支開發(fā)模型
  1. 主線為release版本梨睁,用作發(fā)布
  2. 有新版本或新功能鲸睛,從release中copy一個feature branch來,進(jìn)行開發(fā)坡贺,開發(fā)完成之后merge 回release分支進(jìn)行發(fā)布官辈。

使用場景:維護(hù)人員多,發(fā)布頻繁拴念,無固定發(fā)布周期钧萍,多功能分支。

合并

上述兩種方案都涉及到兩種合并:

  • feature merge 回主線政鼠。
  • feature 定期和主線代碼同步风瘦,將主線代碼merge到feature中。
    • SVN建議盡量避免該種情況公般,因?yàn)閙erge起來沖突會比較多万搔。實(shí)在有必要胡桨,建議只定期merge有價值的改動
    • 完成同步操作,將主線merge到feature上和從主線copy一個分支將feature merge上去瞬雹,兩種做法本質(zhì)上沒有區(qū)別昧谊,后者并不會避免沖突的發(fā)生,同時后者還多操作酗捌。

沖突:

因?yàn)槭菂f(xié)作開發(fā)呢诬,所以會有各種分支,在分支合并時肯定會有沖突胖缤,SVN中將沖突分為兩種尚镰。

  • text conflicts:兩個人同時修改了相同文件,且修改無法很清楚的merge(修改了同一行哪廓,但是修改不同)狗唉,會報該問題。
  • tree conflicts:目錄層面的conflicts涡真。本地修改了一個別人刪除的文件分俯,在更新merge時會報該問題。其他可以歸為目錄conflicts的操作都會報該問題哆料。

特殊情況舉例

除了上述提到的缸剪,feature可能需要和主分支保持定期同步,同時還可能需要和別的feature保持同步剧劝,我們在以release為主線的情況下舉例該情況橄登,并支持一些錯誤的操作方案以及正確的操作方案,有助于加深對Revision和conflicts的理解讥此。

場景
  1. release作為穩(wěn)定主線版本拢锹。
  2. feature-1從release copy出來進(jìn)行開發(fā)。
  3. feature-2從release copy出來進(jìn)行開發(fā)萄喳。
  4. feature-2在開發(fā)期間需要使用feature-1的新功能卒稳,且在feature-1上線前就要使用(feature-1 在 feature-2前上線),所以需要把feature-1 同步到feature-2上他巨。
錯誤操作
  1. feature-1 merge到了feature-2中充坑。
  2. feature-1 繼續(xù)后續(xù)開發(fā),開發(fā)完成后 merge 回release染突,發(fā)布release捻爷。
  3. feature-2 開發(fā)完成后,merge回release時份企,在feature-1中新增的文件(feature-2中未修改)產(chǎn)生了tree conflict也榄。

產(chǎn)生conflict原因分析:feature-1 merge進(jìn)feature-2后,相當(dāng)于feature-1的改動在feature-2上實(shí)現(xiàn)了一遍司志,會生成一個新的Revision = X甜紫;然后將feature-1 merge進(jìn)release降宅,feature-1的改動會在release上生成一個新的Revision = Y(X != Y,兩者除了Y比X大其他沒有任何關(guān)系囚霸,可以理解為兩次單獨(dú)的修改)腰根;后續(xù)feature-2 merge 到 release時,對于在feature-1中新增的文件拓型,相當(dāng)于在兩個不同的Revision中额嘿,該文件都被新建,所以產(chǎn)生了tree conflicts吨述。

正確操作
  1. 從release中copy出feature-3
  2. 將feature-1 merge 到feature-3
  3. 從feature-3 中copy出 feature-4 來進(jìn)行feature-1 的后續(xù)開發(fā)岩睁,完成開發(fā)后merge回release。
  4. 將feature-2 merge到 feature-3中揣云,在feature-3中繼續(xù)feature-2的開發(fā)。
核心理念

不要把feature merge到兩個分支中冰啃,同時這兩個分支后續(xù)還需要進(jìn)行merge邓夕,這樣會出現(xiàn)沖突。因?yàn)橄喈?dāng)于兩個分支上各自進(jìn)行了feature的開發(fā)阎毅,兩者并無關(guān)聯(lián)關(guān)系焚刚,雖然merge來源一致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扇调,一起剝皮案震驚了整個濱河市矿咕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狼钮,老刑警劉巖碳柱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異熬芜,居然都是意外死亡莲镣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門涎拉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來瑞侮,“玉大人,你說我怎么就攤上這事鼓拧“牖穑” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵季俩,是天一觀的道長钮糖。 經(jīng)常有香客問我,道長种玛,這世上最難降的妖魔是什么藐鹤? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任瓤檐,我火速辦了婚禮,結(jié)果婚禮上娱节,老公的妹妹穿的比我還像新娘挠蛉。我一直安慰自己,他們只是感情好肄满,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布谴古。 她就那樣靜靜地躺著,像睡著了一般稠歉。 火紅的嫁衣襯著肌膚如雪掰担。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天怒炸,我揣著相機(jī)與錄音带饱,去河邊找鬼。 笑死阅羹,一個胖子當(dāng)著我的面吹牛勺疼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捏鱼,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼执庐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了导梆?” 一聲冷哼從身側(cè)響起轨淌,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎看尼,沒想到半個月后递鹉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡狡忙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年梳虽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灾茁。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡窜觉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出北专,到底是詐尸還是另有隱情禀挫,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布拓颓,位于F島的核電站语婴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砰左,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一匿醒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缠导,春花似錦廉羔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至髓削,卻和暖如春竹挡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背立膛。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工揪罕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人旧巾。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓耸序,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鲁猩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • iOS 開發(fā) SVN 版本控制器 更多技術(shù)交流請加群 iOS技術(shù)聯(lián)盟 27512466 SVN是Subversio...
    Sunny_Fight閱讀 8,746評論 7 63
  • 命令的使用 1罢坝、檢出 svn cohttp://路徑(目錄或文件的全路徑)[本地目錄全路徑] --username...
    小李龍彪閱讀 4,422評論 0 9
  • 這些都是平時自己在備忘錄里嗎瞎寫的紀(jì)錄廓握,懶得整理,估計也就是只有我自己能看懂嘁酿。 svn命令行創(chuàng)建和刪除分支和tag...
    LYPC_下里巴人閱讀 972評論 0 1
  • 使用svn幾年了隙券,一直對分支和合并敬而遠(yuǎn)之,一來是因?yàn)榉种У墓芾聿辉撐也傩哪炙荆砑词股婕暗椒种У墓芾碛樽校膊桓屹Q(mào)然使...
    VincentHK閱讀 13,919評論 1 20
  • 3個問題 安裝優(yōu)化軟件環(huán)境nginx,lvs <== 運(yùn)維工程師 程序代碼(不斷更新)<==開發(fā)工程師游桩,開發(fā)+運(yùn)維...
    木心若素閱讀 7,889評論 1 7