問題場景
在使用 SVN 版本控制時,本地文件與倉庫版本發生衝突,需求是放棄本地修改,完全使用倉庫中的版本覆蓋本地文件。用戶嘗試直接刪除文件但發現產生了多個衝突文件(如 `.mine`、`.r*` 等),不知該刪除哪些。
衝突文件說明
SVN 衝突產生的典型文件:
- 原文件名:當前工作副本(包含衝突標記 `<<<<<<<` `=======` `>>>>>>>`)
- 文件名.mine:衝突前的本地修改版本
- 文件名.r舊版本號:更新前的基礎版本
- 文件名.r新版本號:倉庫最新版本(即想要覆蓋的目標版本)
標準解決流程
方法一:命令行操作(推薦)
# 1. 刪除所有衝突相關文件
rm filename filename.mine filename.r*
# 2. 執行更新,自動從倉庫獲取最新版本
svn update
方法二:TortoiseSVN 圖形界面操作
- 右鍵點擊衝突文件/目錄 → TortoiseSVN → Edit Conflicts(編輯衝突)
- 在合併工具中選擇 Use 'Theirs' (repository version) 使用倉庫版本
- 保存並標記衝突已解決
- 提交變更
方法三:直接強制覆蓋(最簡潔)
# 遞歸處理目錄下所有衝突
svn revert -R .
svn update
svn revert 會撤銷所有本地修改(包括衝突標記),恢復到更新前的純淨狀態,隨後 svn update 獲取倉庫最新版本。
注意事項
- 操作前建議備份重要本地修改(如有)
- 若僅需覆蓋特定文件,可指定文件路徑而非整個目錄
- 解決衝突後務必執行
svn resolved 或在 GUI 中標記「Resolved」
最佳實踐建議
平時開發中养成習慣:
- 開發前先
svn update 獲取最新代碼
- 小步提交,減少大範圍衝突概率
- 使用分支開發新功能,合併前充分測試