前言:工具
做爲團隊開發,SVN這樣的版本控制工具勢必是不可少的,前些日子,由於同事對SVN的使用不規範,致使了不少沒必要要的麻煩,而後我在QQ空間裏吐槽了下,還引起了好多人的爭論,不乏技術大牛也說出了本身的觀點「規則優於配置」,不過做爲使用者,弄清楚各類情景的原理仍是頗有必要的,這樣利於本身利於他人。spa
情景一:單人操做文件設計
示意圖:
3d
第一個故事是這樣的:版本控制
靠譜哥想開個店子,迎娶白富美,走上人生巔峯!因而他動手了(比你強哦,好歹他行動了,哈哈)blog
1.首先靠譜哥,他準備些資料,如上圖在SVN上作了配置,文件基礎版本爲:V01.properties.圖片
2.靠譜哥後來想修改下配置文件,想增長一些內容因此他作了以下操做資源
Step1:從SVN上取到基礎版本V01.properties到本地;開發
Step2:在本地基於V01.properties修改資料,修改完保存到本地,本地命名爲:K02.V01.properties。(SVN則認爲這將是V01.properties升級版,在本地叫K02.V01.properties,其中K=kaopu(靠譜),02=01的下個版本,V01=基於V01版本修改而來)it
Step3:靠譜哥先update一下,未發現SVN上比本地的基礎版本V01.properties更新的版本,因此SVN不用處理合並;
Step4:commit資料,SVN在庫上造成新的正式版本:V02.properties.
3.靠譜成功完成了一次資料修改
第一個故事描述了一次完整的SVN從 下載基礎版本-->本地基於基礎版本修改文件-->提交前檢查SVN庫上是否有新版本-->提交修改的文件,並在SVN庫生成正式新版本。
情景二:兩人操做同一文件
示意圖:
第二個故事是這樣的:
靠譜哥想開個店子,迎娶白富美,走上人生巔峯!他一我的幹以爲沒意思,因此叫來了呆逼朋友哉哥來一塊兒合做(靠譜還真是呆逼,本身要虧就算了,還拖基友下水,不靠譜)
Step0:時空倒轉,反正就是回到了SVN庫上只有一個版本的時候,如上圖:靠譜準備好了一些資料(怎麼這麼奇怪的資料,嘻嘻不告訴大家);
靠譜想:「恩,這一次要設計個牛B點的URL,URL就是統一資源定位,很重要的,不能和上次同樣,嗯?我爲何要說上一次,不是時空倒轉了麼,嗯,無論了(多傻逼的靠譜)」
話很少少,靠譜哥操做(歷史老是驚人的相,丫的操做竟然又來一次):
Step1:從SVN上取到基礎版本V01.properties到本地;
Step2:在本地基於V01.properties修改資料,修改完保存到本地,命名爲:K02.V01.properties。
Step3:靠譜哥先update一下,未發現SVN上比本地的基礎版本V01.properties更新的版本,因此SVN不用處理合並;
Step4:commit資料,SVN在庫上造成新的正式版本V02.properties.
哉哥也是個呆逼,上班一天回來累死累活,看片的時間都不夠,竟然最後仍是答應了靠譜哥一塊兒弄什麼破店子。
哉哥哉時空倒轉後的第一時間就檢查了SVN庫(這特麼就是職業病),好歹這也是目前惟一的資產了,結果看到基礎版本里的店子竟然是靠譜哥,哉哥大怒,因而一鼓作氣
以下操做:
Step1:從SVN上取到基礎版本V01.properties到本地;
Step2:在本地基於V01.properties修改資料,修改完保存到本地,命名爲:Z02.V01.properties;
Step3:哉哥先update一下,竟然發現SVN上存了在比本地的基礎版本V01.properties更新的版本V02.properties,因此SVN須要作點什麼;
SVN的思考:哉哥基於V01.properties修改是不合理的,哉哥應該基於V02.properties來修改,可是他都已經修改完了,看來只有我來幫他合併了 第一行:沒有問題,你們都沒改; 第二行:靠譜哥沒改,那就按哉哥的來改吧; 第三行:哉哥都不知道有第三行的存在,那我就給他加上吧; 改完了,保存在哉哥本地爲Z03.V02.properties |
Step4:commit資料,SVN把哉哥本地的Z03.V02.properties提交到SVN庫上造成新的正式版本V03.properties(),修改爲功;
第二個故事講完了,靠譜哥和哉哥兩我的很默契的完成了一次對同一個文件的修改;
情景三:兩人同時操做一個文件衝突
示意圖(圖片看不清請先下載):
第三個故事是這樣的:
靠譜哥想開個店子,迎娶白富美,走上人生巔峯!他以爲兩我的幹錢不夠,因而又把喜妹拖下了水。
Step0:時空倒轉,反正就是再次回到了SVN庫上只有一個版本的時候,如上圖:靠譜準備好了一些資料;
哉哥仍是想當店長,結果喜妹竟然也有一樣的想法
哉哥操做以下:
Step1:從SVN上取到基礎版本V01.properties到本地;
Step2:在本地基於V01.properties修改資料,修改完保存到本地,命名爲:Z02.V01.properties。
Step3:哉哥先update一下,SVN上的最佳版本依然V01.propertie,因此SVN不須要作點什麼;
Step4:commit資料,SVN把哉哥本地的Z02.V01.properties提交到SVN庫上造成新的正式版本V02.properties(),修改爲功;
喜妹操做以下:
Step1:從SVN上取到基礎版本V01.properties到本地;
Step2:在本地基於V01.properties修改資料,修改完保存到本地,命名爲:X02.V01.properties;
Step3:喜妹先update一下,發現SVN的最佳版本再也不是V01.properties而是V02.properties,因此SVN須要作點什麼;
SVN又開始思考:喜妹基於V01.properties修改是不合理的,喜妹應該基於V02.properties來修改,可是他都已經修改完了,看來只有我來幫他合併了 第一行:沒有問題,你們都沒改; 第二行:哉哥竟然改了(店長從 靠譜哥 --> 哉哥),喜妹也改了(店長從 靠譜哥--> 喜妹); 完了完了,到底怎麼改,前任店長到底要把店鋪鑰匙交給誰????好把,看大家乾的好事兒,作爲SVN我也無論了。 |
Step4:SVN給出了衝突的提示;
第三個故事講完了,故事裏哉哥得知上一任店長是靠譜哥,並要求作下一任店長,同事喜妹也取到了基礎版本,得知了上一任店長是靠譜哥,一樣要求作下一任店長。結果兩我的打起來了吧。SVN表示很爲難,其實上一任店長靠譜哥也很爲難;
總結第三個故事:其實哉哥和喜妹同事獲取到了上一任店長的信息,惋惜哉哥有過第二個故事的經驗(不是說好了時空倒轉的麼,毛的經驗可談啊...)及時修改了資料並及時提交,正常上位!喜妹還在基礎版本上作修改,殊不知道哉哥早就上位了,致使讓太監(SVN)很爲難,只能告訴你衝突咯,以前的修改算是白費了。固然喜妹修改前獲取到的就是最新版本,只惋惜手腳慢,被人先上了位,改了朝換了代,這個時候喜妹再拿着前朝的聖旨來上位,你們是不認可的,不過你們都是有素質的人,可不能直接霸蠻提交,這樣哉哥上位的歷史就被掩埋了。喜妹若是還想上位,就得先和現任店長商量好,若是哉哥贊成了,喜妹就能夠上位了。
情景四:故事好複雜...
示意圖(圖片看不清請先下載):
聽了這麼多故事,最後這個故事就留給各位看官本身去講吧。
第一次寫博文總結
文章有點亂,情節也很跳躍,道在於行,親行以後,方纔能得道,請輕點拍磚。下次要寫得思路清晰些,欲知靠譜哥、哉哥、喜妹的後續故事,下回再解。