原文:http://developer.51cto.com/art/201006/203185.htm

本節向大家簡單描述一下SVN錯誤,在學習SVN的過程中如何避免SVN錯誤,SVN錯誤如何解決(locked conflict 文件不存在)這是大家最關心的問題,本節就和大家一起來學習一下,希望通過本節的介紹大家對SVN錯誤有深刻的理解。

這段時間做項目也學到了很多,尤其是關於SVN的。在使用SVN之前對於SVN的學習僅限於架服務器。對於學習中遇到的錯誤則都是通過一點一滴的經驗得到的。

SVN錯誤記錄


1.強制輸入提交日誌的鈎子(hooks)程序(pre-commit)無法運行,提交的時候報錯:

Error: Commit failed (details follow): Error: MERGE request failed on ‘/svn/ttt/trunk/engineering/doc/%E5%89%8D%E7%BD%AE%E6%9C%BA’ Error: Failed to start ‘/home/jira/repo/ttt/hooks/pre-commit’ hook


可能的原因:


(1).pre-commit的權限設置問題,確保具有運行權限,chmod a+x pre-commit;有些系統要求所有者為www-data:www-data,這點根據安裝的svn而定


(2).系統的資源不足(主要是內存),重啓apache服務,如果問題解決,一般是此原因。


2. Relocate can only change the repository part of an URL


如果服務器上的某個文件的位置有改動,如果我們想使用relocate將工作拷貝中的此目錄的路徑重定位的話,肯定會遇到這個錯誤的。但是如果使用 switch來改變路徑,則不會遇見此錯誤。


原因(Switch & Relocate的區別)


Switch —–在版本庫內改變與當前工作拷貝關聯的服務器路徑URL(只限於同一個Repository內),應用情景:有時,服務器的目錄會有所變化,和你當前工作拷貝關聯的服務器URL改變了,這種改變的直接結果是,你在工作拷貝中所做的修改不能提交到服務器,這時就需要Switch到正確的URL再提交。

Relocate—-功能和Switch雷同,差別在於,Relocate實現的是Repository和Repository之間的切換。當服務器地址或Repository名稱發生變化時,可以用它來更新你的工作拷貝。

另外:relocate的功能與“svn switch –relocate 舊地址 新地址”相同。


3、最開始出現的SVN錯誤是locked,嚴格説,locked不是錯誤。解決比較簡單:右擊文件夾—>tortoiseàcleanup,一般情況下不會出錯,如果遇到無法cleanup,那就是其他的錯誤或者衝突了。


4、再就是衝突,conflict。由於兩個(或多個)人同時更改了一個文件。理論上專業一點的説法是:採用鎖定-修改-解鎖方案來進行版本控制。舉個例子來講Sally下載了版本A,此時,版本A此時就進行了鎖定,然後Sally對A進行改動,成了A’,未提交;此時Herry再從服務器上下載的時候還是A。Herry也對A進行了改動,成了A’’。那麼,Sally提交,版本A升到A’,Herry再提交的時候就會先提示文件過時,請先update。當update的時候提示衝突。

解決的方法也很簡單:

在文件夾上右擊—>tortoiseàresolveà在彈出的對話框中右擊衝突的文件à選擇resolve use theirs 或者選擇 resolve use mine。此時,Sally和Herry的版本只能提交一份。也就是説只能使用版本A’和A’’ 其中之一。當然這實際上是人工解決的。SVN防止了無知覆蓋錯誤的產生。


產生衝突並不是我們想要的,對於項目的開發也是不好的。所以要儘量避免SVN錯誤:


一、良好的工作分配是首要的。個人管個人的文件,不更改其他人的文件。


二、工作組安排好提交。


三、個人想要修改文件之前先update,然後再修改;修改完成後及時提交(commit)。


5、還會遇到***文件夾不存在的情況,有時候是組內成員將文件夾刪除,這種問題一般不會在正規的開發中遇到。解決的辦法就是先備份,然後重新checkout。本節關於SVN錯誤產生及解決介紹完畢。