09.SVN入門筆記——在 Eclipse 中使用 SVN 客戶端外掛解決衝突

java陽旭發表於2020-12-14

什麼情況下會發生衝突

  1. 兩個開發人員,Harry 和 Sally,分別從伺服器端下載了檔案 A。

  2. Harry 修改之後,A 變成了 A’,Sally 修改之後,A 變成了 A’’。

  3. Harry 先一步提交,使伺服器端檔案的版本也變成了 A’

  4. Sally 本地的檔案 A’’已經過時了,此時她已無法提交檔案,伺服器會要求她先進行一次更新操作。

  5. 此時 Sally 的更新操作有兩種可能:

    1. Sally 所做的修改與 Harry 不是同一個位置,更新操作嘗試合併檔案成功。
    2. Sally 所做的修改與 Harry 恰好是同一個位置,更新操作嘗試合併檔案失敗,發生衝突。
  6. 發生衝突後,本地工作副本會發生如下變化:

    1. 檔案 A 中的內容發生如下改變:

      public static void main(String[] args) { 
      	System.out.println("Edit By Command!"); 
      	System.out.println("Edit By Command!");
      <<<<<<< .mine
      	System.out.println("Edit By Eclipse!");
      =======
      	System.out.println("Edit By Command!New Edit");
      >>>>>>> .r14
      	System.out.println("Edit By Command!"); 
      	System.out.println("Edit By Command!");
      }
      

      其中,從<<<<<<< .mine 到=之間是發生衝突時本地副本的內容。從=到>>>>>>> .r14 是發生衝突時伺服器端的最新內容。注意這裡 r 後面的數字是發生衝突時伺服器端的版本號,有可能是任何整數值,r14 只是一個例子。

      同時檔案圖示變成一個“黃色的!”。

    2. 與衝突檔案同目錄下新增檔案,副檔名為.mine,其內容是發生衝突時本地副本的檔案內容。

    3. 與衝突檔案同目錄下新增檔案,副檔名為.r 小版本號,例如 MyCRM.java.r13,其內容是衝突發生之前,伺服器端的檔案內容,可以作為解決衝突的參照。

    4. 與衝突檔案同目錄下新增檔案,副檔名為.r 大版本號,例如 MyCRM.java.r14,其內容是衝突發生時,伺服器端的檔案內容。

解決衝突

發生衝突的提示:

  1. 在衝突檔案上點右鍵→Team→Edit Conflicts…→出現如下介面

    以對比的方式將本地內容與衝突內容顯示出來,其中左側為本地內容,右側為衝突內容。其中本地內容是可以修改的。

  2. 根據需要和實際情況將本地內容更正,這個過程很可能需要牽涉衝突的兩位開發人員進行必要的溝通。

  3. 在衝突檔案上點右鍵→Team→Mark as Merged

    此時.mine 檔案和.r 版本號檔案都會被自動刪除,衝突檔案的圖示變為“*”(新版本為在檔名前新增 > 符號),表示可以提交。

  4. 提交檔案,檔案圖示變為“金色圓柱體”。

相關文章