1. 程式人生 > >原始碼管理工具 一一 SVN-衝突演示和解決衝突

原始碼管理工具 一一 SVN-衝突演示和解決衝突

衝突演示和解決衝突

  • 一.回顧上節課的內容
    1.張三在person.h中添加了weight屬性,並提交到了伺服器
    2.李四並不知道張三向伺服器提交了最新程式碼,而是在person.h中的同一行添加了name屬性,這個時候進行提交報了out of date過期的錯誤,需要先更新伺服器最新的程式碼
    
  • 二.進行開發操作
    1.李四將伺服器最新的程式碼更新到本地提示有衝突,並提示如何去解決衝突,提示解決衝突方案
       1.(df)diff-full:顯示該檔案在伺服器與原生代碼的所有變化
       2.(e)edit:進入編輯狀態,在終端解決衝突(不推薦)
       3.(mc)main-conflict:用本地的程式碼覆蓋伺服器的程式碼
       4.(tc)theirs-full:用伺服器的程式碼覆蓋本地的程式碼
       5.(p)postpone:延期解決衝突,將衝突的檔案下載到本地進行手動解決衝突
       6.show all options : 展示所有的選項
       svn update
    
    2.輸入df,展示產生衝突的程式碼,本地新增與伺服器新增的程式碼,可以通過edit來解決衝突(一般不推薦在終端解決),這裡多了個resovled
       (r)resovled:當使用命令列去解決衝突時,最後需要通過此選項來執行已經解決衝突的操作
    
    3.李四作為一個新人,一般會有些膽怯心裡,讓伺服器程式碼來覆蓋本地的程式碼(雖然沒有必要),選擇tc
    
    4.之後李四開啟person.h,發現之前新增的name屬性沒了,然後在下一行添加了name屬性,之後提交到伺服器
       open person.h
       svn commit -m "添加了name屬性"
    
    5.這個時候張三可能不知道伺服器有最新的程式碼,而是開啟person.h,添加了sex屬性,但是在提交時發生了錯誤,out of date(過期),之後更新程式碼,發生衝突,這個時候張三覺得自己作為老員工使用本地的程式碼覆蓋伺服器的程式碼,之後本地的版本號就不低於伺服器的版本號了,最後提交到伺服器
       open person.h(新增sex屬性)
       svn commit -m "添加了sex屬性"(提交修改的檔案報過期錯誤)
       svn update(更新伺服器程式碼產生衝突)
       mc(使用本地的程式碼覆蓋伺服器的程式碼)
       svn commit -m "添加了sex屬性"(解決衝突後再提交到伺服器)
    
    6.這個時候有個人就比較苦逼了,李四檢視下有沒有最新的程式碼,嘗試更新最新的程式碼到本地,發現有最新的程式碼,之後開啟person.h,發現name屬性又沒了(這老員工太不好伺候了!!!),然後添加了name屬性,之後提交到伺服器
       svn update(嘗試更新發現有最新的程式碼)
       open person.h (發現name屬性不見了,之後重新新增)
       svn commit -m "添加了name屬性"(重新提交)
    
    7.張三這個時候可能不知道伺服器已經有最新的程式碼了,而是開啟person.h,添加了phoneNum屬性,然後進行提交,提交之後依舊是out of date,之後更新程式碼,產生衝突,這次則使用延遲手動解決衝突
       open person.h(新增phoneNum屬性)
       svn commit -m "添加了phoneNum屬性"(out of date 過期)
       svn update(更新伺服器程式碼產生衝突)
       p(延遲解決衝突,會在code資料夾下面多了三個資料夾)
       person.h.mian:我本地的程式碼
       person.h.r15:上一個版本的所有內容
       person.h.r16:當前伺服器版本的內容
    
    8.開啟person.h,可以發現伺服器版本內容和本地版本的內容區別
       open person.h
    
    9.手動解決衝突,將person.h中錯誤語法刪除,保留兩個屬性,之後通過命令來執行解決衝突的操作
       svn resolved person.h(必須要跟上檔名,成功後,新增的三個檔案會消失)
    
    10.衝突操作在本地解決,伺服器依舊是原來的程式碼
    
    11.張三將本地的修改提交到伺服器
       svn commit -m "添加了phoneNum屬性"
    
    12.李四更新最新的程式碼到本地
       svn update
       open person.h
    
  • 三.總結
    1.更新程式碼時遇到out of date的錯誤提示一般是由於產生了衝突
    2.常用的解決衝突的方式是
       mc(使用本地的覆蓋伺服器的,有弊端不推薦)
       tc(使用伺服器的覆蓋本地的,有弊端不推薦)
       p(完美解決衝突,需要手動解決,注意點:必須通過命令列svn resovled (檔名) 來確定解決衝突)
    3.產生衝突的原因
       修改公共檔案時,直接進行修改,並沒有先更新再進行修改
    4.如何避免衝突
       1.修改公共檔案前先進行update,再進行修改
       2.修改公共檔案前,最好跟同事提前說一聲,修改完之後讓同事更新一下