項目優化經驗分享(六)SVN衝突和處理

    上一篇博客我們分享了新增需求的確定思想站在全局看問題》。今天我們來分享項目開發中SVN衝突的解決經驗:SVN衝突和處理!

    引言

    開發過項目的人都知道,公司開發一個項目都會使用到版本控制工具,版本控制工具很多,比如Clear case,CVS,Visual SourceSafe,SourceAnywhere ,StarTeam,SVN,CVS,GIT等等,有的是元老級開發工具,有的是後起之秀,各種版本,百花齊放,這篇博客我們將要談到的則是常用版本控制工具:SVN的衝突和處理。

    實例  


    1.衝突產生

            假設A、B兩個用戶都在版本號爲1000的時候,更新了practice.txt這個文件,A用戶在修改完成之後提交practice.txt 到服務器,這個時候提交成功,然後practice.txt文件的版本號已經變成1001了。同時B用戶在版本號爲1000的practice.txt文件上作修改,修改完成之後提交到服務器時,由於不是在當前最新的1001版本上作的修改,所以導致提交失敗。

           衝突發生時,subversion會在當前工作目錄中保存所有的目標文件版本[上次更新版本、當前獲取的版本(即別人提交的版本)、自己更新的版本、目標文件]。

    (1)現在A、B兩個用戶都更新practice.txt文件到本地。

1

    (2)文檔中原始文件內容如下:

2

    (3)A用戶修改文件,添加內容“A用戶修改-提交”完成後提交到服務器

4

    (4)B用戶修改文件,添加內容“B用戶修改-提交”完成後提交到服務器

6

    (5)B用戶提交更新至服務器時提示如下:


    B用戶將文件提交至服務器時,提示版本過期:首先應該從版本庫更新版本,然後去解決衝突,衝突解決後要執行svn resolved(解決),然後在簽入到版本庫。在衝突解決之後,需要使用svn resolved(解決)來告訴subversion衝突解決,這樣才能提交更新。

    2.衝突處理

    方法一:放棄自己的更新,使用svn Revert(回滾),然後提交。


    當使用svn revert時不需要再用svn resolved來刪除臨時文件了,因爲撤銷會恢復所有的文件到修改前,除了已刪除的文件。

    方法二:放棄自己的更新,使用別人的更新。使用最新獲取的版本覆蓋目標文件,執行resolved filename並提交(選擇文件—右鍵—解決);


    方法三:手動解決,衝突發生時,通過和其他用戶溝通之後,手動更新目標文件。然後執行resolved filename來解除衝突,最後提交。

    (1)手工合併衝突文件:當查看了具體出衝突的文件後,可以打開該文件,找到衝突的標誌。
      Top piece of bread
      Mayonnaise
      Lettuce
      Tomato
      Provolone
      <<<<<<< .mine
      Salami
      Mortadella
      Prosciutto
      =======
      Sauerkraut
      Grilled Chicken
      >>>>>>> .r2
      Creole Mustard
      Bottom piece of bread
      小於和大於符號之間的就是衝突的地方,如果有能力在修改完文件並且刪除衝突標誌之後,進行svn resolved來刪除三個臨時文件
      注:如果修改時不是很明白,可以參考衝突時的三個文件
 
    (2)複製某一工作文件(一般用的不是很頻繁):如果只是希望取消本次的修改,你可拷貝svn爲你生成的文件替換你的工作拷貝
      $ svn update
      C practice.txt
      Updated to revision 2.
      $ ls practice.*
      practice.txt practice.txt.mine practice.txt.r2 practice.txt.r1
      $ cp practice.txt.r2 practice.txt(這裏r2是版本庫裏你此次更新前的版本文件)
      $ svn resolved practice.txt(用來刪除三個臨時文件)


     OK!衝突解決!

11

    提交更新!



    總結

    有時候衝突是不可避免的,但是我們可以儘量降低衝突的複雜度,具體解決方式有: 

    1、當文檔編輯完成後,儘快提交,頻繁的提交/更新可以降低在衝突發生的概率,以及發生時解決衝突的複雜度。

    2、在提交時,寫上明確的message,方便以後查找用戶更新的原因,畢竟隨着時間的推移,對當初更新的原因有可能會遺忘。

    3、養成良好的使用習慣,使用SVN時每次都是先提交,後更新。每天早上打開後,首先要從版本庫獲取最新版本。每天下班前必須將已經編輯過的文檔都提交到版本庫。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章