前言:
作為團隊開發,SVN這樣的版本控制工具勢必是不可少的,前些日子,因為同事對SVN的使用不規范,導致了很多不必要的麻煩,然后我在QQ空間里吐槽了下,還引發了好多人的爭論,不乏技術大牛也說出了自己的觀點“規則優於配置”,不過作為使用者,弄清楚各種情景的原理還是很有必要的,這樣利於自己利於他人。
情景一:單人操作文件
示意圖:
第一個故事是這樣的:
靠譜哥想開個店子,迎娶白富美,走上人生巔峰!於是他動手了(比你強哦,好歹他行動了,哈哈)
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版本修改而來)
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)很為難,只能告訴你沖突咯,之前的修改算是白費了。當然喜妹修改前獲取到的就是最新版本,只可惜手腳慢,被人先上了位,改了朝換了代,這個時候喜妹再拿着前朝的聖旨來上位,大家是不承認的,不過大家都是有素質的人,可不能直接霸蠻提交,這樣哉哥上位的歷史就被掩埋了。喜妹如果還想上位,就得先和現任店長商量好,如果哉哥同意了,喜妹就可以上位了。
情景四:故事好復雜...
示意圖(圖片看不清請先下載):
聽了這么多故事,最后這個故事就留給各位看官自己去講吧。
第一次寫博文總結
文章有點亂,情節也很跳躍,道在於行,親行之后,方才能得道,請輕點拍磚。下次要寫得思路清晰些,欲知靠譜哥、哉哥、喜妹的后續故事,下回再解。