1. TortoiseSVN常見的錯誤信息與解決方法
1、無法復制/移動‘XXX.svn-base‘到’XXX.tmp‘:系統找不到指定文件。
這個錯誤信息通常在你更新工作拷貝時出現,可能的原因有兩個:
版本庫中有兩個文件的名字只是大小寫不同,這在Windows下是不允許簽出的,因為Windows的文件系統是大小寫不敏感的。很可能其中一個文件是誤添加的,所以你要找出是哪一個,然後刪除它,以確保不會把更改提交到錯誤的文件。
某個文件的文件名是非法的(對Windows來說非法),比如,“con”,“lpr”,“com”都是非法的,因為這些都是設備名。當然,含有“/*?:|”和其它特殊字元在Windows(NTFS和FAT)也是不允許的。
是,我們知道這個錯誤信息對解決問題沒什麼實質性的幫助,但這個錯誤信息是來自Subversion庫的,我們改不了。
有幾個辦法可以避免這個問題,請看這里。
2、無法打開文件’XXXnnn-n.txnchanges‘:無法訪問,文件正被其它程序唯源使用。
通常報告這個錯誤的人都說這個問題是隨機發生的,並且通常會在一次大的提交中發生。重新提交可能成功,也可能在別的地方出錯。
最有可能的原因是,有一個病毒掃描程序正在非正常地佔用這個文件。你可以試著禁用病毒掃描,或者讓它忽略你的版本庫文件。
類似的錯誤也可能發生在你的工作拷貝,試試讓它忽略.svn文件夾。
3、添加‘XXX’失敗:同名對象已存在。
這個錯誤通常是在你更新工作拷貝時發生。之所以拋出這個錯誤是因為Subversion絕對不會擅自刪除或者覆蓋你已有的本地文件。有三個可能原因會導致這個錯誤:
你有一個未納入版本控制的本地文件,名字跟其他人已添加的文件一樣。這種情況下你可以先移走或者重命名你的本地文件再更新。之後你可以決定是需要合並還是把你的悶山襪文件改個名字。
螞激版本庫中的一個文件被重命名了,但只是大小寫不一樣,如Install.txt改為install.txt,而你在本地作了修改。當你更新時就會遇到第一種情況,你修改過的本地文件被視為未納入版本控制。將它移到其它地方,再更新,問題解決。
版本庫中有兩個文件的名字只是大小寫不同,這在Windows下是不允許簽出的,因為Windows的文件系統是大小寫不敏感的。很可能其中一個文件是誤添加的,所以你要找出是哪一個,然後刪除它,以確保不會把更改提交到錯誤的文件。
4、OPTIONSof’《path》‘:401AuthorizationRequired《url》
升級到1.4.x版之後,你發現無法訪問版本庫了,每次都出這個錯:OPTIONSof’path‘:401AuthorizationRequired’url‘。
這是因為1.4.x版使用了SSPI自動驗證,即TortoiseSVN會自動使用登錄Windows域控制器的用戶信息來作身份驗證。
如果你設置你的伺服器以SSPI的方式向域控制器作身份驗證,而域控制器又沒開放GUEST用戶的話,不會有問題。但是如果開放了GUEST用戶,自然所有以GUEST用戶進行的驗證都會通過——但是一般來說你是不會授權GUEST訪問你的版本庫的。這就造成了驗證通過了,但授權不成功。
另一個失敗的原因是,你設置用來訪問版本庫的用戶跟你用來登錄工作站的用戶不一致(那我就奇怪了,如果是這樣你根本就不應該以SSPI方式來驗證呀)。
有幾個方法可以解決此問題:
在域控制器中禁用GUEST用戶
將登錄工作站的用戶和訪問版本庫的用戶設為一樣
不用SSPI來做版本庫驗證
檢查用戶名的大小寫,將控制文件中的用戶名改為小寫對解決問題也可能有幫助
5、客戶端版本太舊,不能操作工作拷貝‘XXX’
完整的錯誤信息是:客戶端版本太舊,不能操作工作拷貝’。‘;請下載更高版本的Subversion客戶端。
當先使用一個比較高版本的Subversion客戶端,然後又用比較低版本的客戶端來執行命令,就會發生這個錯誤。比如你先用了1.4.x版的客戶端操作工作拷貝,然後用1.3.x版的操作同一個工作拷貝。
這是因為Subversion1.4和1.5會自動更新工作拷貝的格式,而老版本的客戶端不認新的格式。
唯一的解決辦法是升級你的客戶端,或者用你老版本的客戶端重新簽出。
6、工作拷貝已過期
這個錯誤是在提交修改的時候出現的,通常是因為在版本庫里,你想要提交的文件已經被其他人修改了。
這時你要先用更新命令更新的的工作拷貝到版本庫當前的版本。
你可能會不明白為什麼要這么做,尤其是在你確知版本庫並沒有被修改過的情況下。答案很簡單,因為提交的時候,並不會徹底更新你的工作拷貝,而只是那些修改的文件會被自動更新。舉個例子,有個新建的版本庫:
AddFolderinrevision1
AddFile1andFile2inrevision2
現在版本庫處於修訂版本3,但你的工作拷貝的版本會是這個樣子:
Folder:revision1
Folder/File1:revision3
Folder/File2:revision2
這時如果你修改File2然後提交,就會失敗。因為客戶端告訴版本庫File2是在版本2的基礎上作修改的,但是版本庫已經處於版本3了。如果此時你執行更新命令,就會將File2也變成版本3(當然,你的本地修改還會在的)。
這個錯誤還可能在你試圖創建分支或標記時出現。答案永遠都是:如果工作拷貝已經過期,那就更新唄!
7、無法寫到標准輸出
TortoisePlink使用的是標準的plink代碼,但不是針對Windows編譯的,因而無法正常發送錯誤信息。在TSVN的設置-》網路里,將SSH客戶端指向標准plink,錯誤信息就會輸出到一個命令行窗口中。設置好之後再像之前一樣運行TortoisePlink。
“無法寫到標准輸出”表示Plink想要拋出一個錯誤,但是因為TortoisePlink並沒有提供一個DOS窗口,所以就沒沒有標准輸出來接收這個錯誤信息。
知道是設置有問題後,可以先使用普通的plink程序,看到底是什麼錯誤,解決它。
如果普通plink掛住了,那就是參數不對(設置-》網路)。
另一個可能是SSH後台程序找不到svnserve可執行文件。以你將要使用的用戶(此處為myuser)登錄到伺服器,輸入“whichsvnserve”,如果沒有顯示指向可執行文件的路徑,就把該文件(以及其它Subversion可執行文件)設為對於該用戶可全局訪問。
8、400伺服器未能理解請求(400BadRequest)
REPORTrequestfailedon’。。。‘REPORTof’。。。‘:400BadRequest(http://。。。)
你的DAV請求被防火牆阻止了,多數防火牆都會這么這么干。你可以讓你的管理員更改防火牆的設置,或者以https訪問,如https://svn.collab.net/repos/svn/,這樣你與版本庫之間的通信是經過SSL加密的,防火牆無法阻止(如果它沒有封掉SSL埠的話)。
另外,現已確認某些病毒掃描程序(如卡巴斯基)也會導致這個錯誤。
9、403對被請求頁面的訪問被禁止(403Forbidden)
PROPFINDrequestfailed:403Forbidden
這有可能因為你試圖訪問版本庫的父目錄(而不是版本庫本身)。你可以試著在URL尾部指定版本庫的名字,還有別忘了名字後面的斜杠‘/’。
有關導致此錯誤的真正原因,請查看Apache的錯誤日誌。
10、405HTTPMethodNotAllowed
PROPFINDRequestFailed-Error405HTTPMethodNotAllowed
這個錯誤有幾種形式,可能的原因有以下幾個:
PROPFINDRequestFailed你試圖使用較低版本的TortoiseSVN瀏覽版本庫的父目錄。你可以試著在URL尾部指定版本庫的名字,或者升級TortoiseSVN到1.2.3版或更高。
PROPFINDRequestFailed你漏了URL末尾的斜杠‘/’,較舊版本的TSVN要求在版本庫名字後必須有斜杠,否則它會砍掉版本庫名字,等於試圖去訪問它的父目錄。
PROPFINDRequestFailed你可能正嘗試通過一個不允許DAV請求的代理訪問版本庫。通常你用網頁瀏覽器瀏覽版本庫是沒問題的,只在使用svn客戶端時才出錯。你必須配置你的代理伺服器或防火牆,以讓DAV請求通過,或者使用https來訪問,多數代理伺服器無法分析加密過的信息包,因而也就無法阻止DAV請求了。
另一個可能是你正在運行病毒掃描程序或防火牆,很多此類軟體會在你根本不知道的情況下就阻止了DAV請求,可以試一下禁用它們。
LockRequestFailed你嘗試在工作拷貝中鎖定一個文件,而這個文件在版本庫中已經不存在了。你需要先更新工作拷貝。
有關導致此錯誤的真正原因,請查看Apache的錯誤日誌。
2. 公司SVN伺服器,網路IP段修改後SVN就無法進行連接了
SVN 伺服器 IP 地址修改後,客戶端對伺服器的連接可以採用以下的方法重定位:
1. 如果客戶端工具是TortoiseSVN,直接在工作副本上右鍵,選擇TortoiseSVN->relocation,再輸入新的URL。
2. 如果客戶端工具是 eclipse 的插件 subclipse,切換到「SVN資源庫」的透視圖,再在資源庫路徑上右鍵 –> 重新定位…,輸入新的 URL。
3. 項目與svn同步時發生錯誤怎麼解決
需要對項目目錄進行清理。