svn狀態與常見錯誤


TortoiseSVN 1.6.16是最后一個目錄獨立管理自身cache的svn版本(每個目錄下都有一個隱藏的.svn文件夾)

之后的版本會則會根目錄上統一進行管理(只有根目錄下有一個隱藏的.svn文件夾)

各個目錄獨立管理自己cache會有很多好處:

① 各個目錄相互獨立,互相不受影響

② 目錄下出現難以處理的svn錯誤時,可通過刪除目錄重新拉取來暴力解決

由於svn默認對.a和.so文件設置了過濾:對某個目錄add時,不會將該目錄下的.a、.so文件add,必須再手動一個一個的add進去

Global ignore pattern: *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store

該設置記錄在注冊表以下鍵值(HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany\global-ignores)中:

注:Global ignore pattern設置是全局有效的,會作用於本機所有svn的Working Copy

----------------------------------------------------------------------------------------------------------

服務器:Repository

本地: Local 或 Working Copy

== 狀態==

Updated   文件a或目錄A在服務器和本地均受控,本地未做過任何修改且版本較老,執行svn更新時,使用服務器版本覆蓋該文件或目錄

Added     文件a或目錄A在服務器受控、本地不存在且不受控,執行svn更新時,使用服務器版本新建該文件或目錄

Deleted    文件a或目錄A在本地受控且存在,但在服務器已被刪除,執行svn更新時,刪除本地該文件或目錄;

                若執行svn更新文件或目錄依然存在,將文件或目錄Revert掉即可(按照從上到下的順序,先Revert目錄,然后再Revert掉目錄下的文件)

Versioned    文件a或目錄A在服務器受控、本地不受控,但本地存在一個與服務器一致的文件或目錄,執行svn更新時,則該文件或目錄的狀態會變為Versioned

Restored     文件a或目錄A受控,本地的版本號已為最新,但卻在本地被刪除了,執行svn更新時,則該文件或目錄的狀態會變為Restored

External    外部引用鏈接

注:在TGame目錄下右鍵菜單 TortoiseSVN - Properities,即可看到externals所指向的具體路徑

      該路徑可以為相對路徑、也可以為絕對URL。

Missing

1. 文件a或目錄A受控,在本地被刪除了,則其狀態在本地則為Missing

可以通過執行svn更新,從服務器重新拉取文件a或目錄A

2. 有一種情況:即使執行update也不能從服務器拉得Missing掉的文件a或目錄A

當服務器存在文件a和文件a(或目錄A和目錄a)  -- 注:linux操作系統下的文件目錄名是區分大小寫的

然而windows上,是不允許同一文件夾中存在2個僅僅大小寫不同的文件(或目錄)

正是由於操作系統之間的差異,如果本地已經有a.txt的版本信息,在windows上提交僅大小寫不同的A.txt文件時,會彈出如下警告:

解決辦法1:

① 刪除服務器上所有僅大小寫不同的文件(或目錄): 打開Repository Browser,然后選擇這些文件(或目錄),進行Delete刪除    注:刪除前記得備份一下

② 通知所有的客戶端,本地執行update

③ 最后,上傳目標文件(或目錄)即可

解決辦法2:

① 刪除服務器上一個僅大小寫不同的文件(或目錄) 打開Repository Browser,然后選擇該文件(或目錄),進行Delete刪除

② 在本地執行update時,會出現“Can't open file 系統找不到文件的錯誤

   此時需要,新建一個與服務器同名的文件(或目錄),然后執行svn -- delete   注:刪除前記得備份一下;這一步主要是為了清除本地的有問題的緩存

③ 最后,上傳目標文件(或目錄)即可

Merged   文件a在服務器和本地均受控,本地做過修改且版本較老,執行svn更新時,使用服務器版本覆蓋該文件能自動合並修改(注:本地修改與服務器修改不在同一地方)

Conflicted

1. 文件a受控,在本地有修改(mine);當其服務器版本(118)比本地(112)新,執行update不能被svn智能Merged處理時,則文件a的狀態在本地則為Conflicted

a.txt
a.txt.mine
a.txt.r112
a.txt.r118

可以在update列表中,選中紅色處於沖突狀態的文件a,在彈出的右鍵菜單中進行沖突處理:

若已經關掉了update列表,可以在commit列表中按照上述方法進行沖突處理;

或者執行revert,將本地的修改直接丟棄掉,使用服務器的修改

Resolved     conflicted解決后,狀態會變成Resolved。 

Tree conflict

1. 本地文件a原來受控,在本地有修改,當其被服務器刪除,執行update時,則文件a的狀態在本地則為Tree conflict

可以在commit列表執行revert,將其Text status由added(+),tree conflict變為non-versioned,tree conflict,然后執行delete,將本地文件a刪除掉

2. 本地目錄A原來受控,在本地目錄A中的文件有修改,當其被服務器刪除,執行update時,則目錄A的狀態在本地則為Tree conflict

可以在commit列表對A中的所有修改文件執行revert,然后對目錄A執行Undo Add,最后將目錄A刪除掉

 

更多狀態請參考:http://svnbook.red-bean.com/en/1.8/svn.ref.svn.c.status.html 

 

== svn1.6.16 本地cache文件說明 ==

-- 以Weapon_SCAR_ClipIn.wav(音頻二進制文件)和Weapon_SCAR_ClipIn.wav.meta(文本文件)文件為例

entries中文件信息塊:

all-wcprops中的一個文件的信息塊:

注:FF為換頁符(16進制:0x0C),CR為回車符(16進制:0x0D),LF為換行符(16進制:0x0A)

prop-base目錄 -- 二進制文件配置信息  如:Weapon_SCAR_ClipIn.wav.svn-base

text-base目錄  -- 文件配置信息  如:Weapon_SCAR_ClipIn.wav.svn-base(其內容為二進制)   Weapon_SCAR_ClipIn.wav.meta.svn-base(其內容為文本)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM