Settings -> Saved Data -> Authentication Data -> clear。即可清除保存的上個用戶登錄信息;當再次用到svn時,會提示輸入用戶名密碼,輸入新的用戶名密碼即可。
或者,手動刪除下面目錄下的svn登錄用戶信息保存文件:
C:\Documents and Settings\javaLee\Application Data\Subversion\auth\svn.simple
通過TortoiseSVN的clear Authentication Data和手動刪除效果是一模一樣的!都是對userName\Application Data\Subversion\auth\svn.simple\目錄下的已保存登錄用戶信息文件進行刪除。
1. 隱藏文件.svn目錄刪除了怎么辦
Checkout后,工作空間下.svn目錄下有大量隱藏文件,占用比較大的空間,他們是工作空間的管理文件,不能刪除,如果不小心刪除了也不要抓狂,不會影響服務器端的,重新checkout就又可以工作了。如果想不包含這些隱藏文件導出,可以用TSVN菜單里的export完成。
2.文件名大小寫問題,在下載代碼時,下載到一半,系統提示不能找到……文件, 提示Can't copy"……"to"……"系統找不到指定文件
該問題很可能是因為上傳了大小寫不同的同名文件,在Repo-Browser里找到同名文件刪除一個就好了。(該問題曾經困惑過好長時間,解決了是如此簡單)
3. .can’t connect to host …………
(1),服務器有沒有運行,有沒有打開相應端口
如果服務器是svnserve,檢查有沒有運行svnserve,有沒有打開3690端口(我們用的是這個,端口是9999)
如果服務器是apache,檢查apahce是否運行,是否打開80端口
檢查時可以在服務器運行netstat -na看看相應端口是否在LISTEN
(2),防火牆有沒有開放相應端口
(3),客戶端是否可以連接服務器的相應端口
使用命令telnet 服務器IP 相應端口
如:telnet 192.168.0.1 9999
4. 路徑或權限不足時將出現錯誤信息提示:
http://localhost (路徑不對)
Error * PROPFIND request failed on '/' PROPFIND of '/': 200 OK (http://localhost)
http://localhost/svn (權限不足)
Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 403 Forbidden (http://localhost)
http://localhost/svn/repos (正常顯示)
http://localhost/repos (權限不允許)
Error * PROPFIND request failed on '/repos' PROPFIND of '/repos': 405 Method Not Allowed (http://localhost)
解決辦法是填寫正確的路徑或給予適當的權限。
5、不啟動E:\subversion\bin\svnserve.exe ,但啟動了ApacheSVN ,訪問(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:
現象:svn://localhost/svn/repos 不能訪問或提交,提示:Error * Can't connect to host 'localhost': 由於目標機器積極拒絕,無法連接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以訪問或提交。
原因:svn:// 是獨立服務器 svnserver 自己的協議。file:/// 是本地訪問,即服務器端和客戶端在一個機器上。
解決方法:使用 http 方式訪問。(咱啟動用的是svnserve)
6. 提示:405 Method Not Allowed的原因和解決方法
用TortoiseSVN訪問基於apache配置的svn版本庫時,有時候會提示錯誤405 Method Not Allowed,開始用TSVN checkout了一個正常的目錄,假設服務器地址為:http://svn/project1,之后,服務器經過其它配置,這個地址變了,使得用這個地址不再能訪問到正確的版本庫,此時,TSVN就極有可能報405錯誤。另外,當你訪問的地址大小寫與服務器的地址不一致時,也會出現該錯誤。只要將TSVN訪問的地址改成正確的,或修改服務器配置,使原地址可以訪問即可解決。
7.怎樣才能把svn版本庫中的某一個文件或目錄永久的刪除?
[案例一]
例如:當前庫的最新版本是46,我在第46個版本上,更加了一個5M的文件,名字為FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
現在我要把這個新增加的5M文件徹底的刪除,不想讓它存在庫中占用空間
(1)用svn log -v命令查看添加文件時的Path。或者使用tortoisesvn之類的客戶端工具查看也可以
C:/myhouse/SCM_Home/SVN_HOME/localtest/docs/general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"
------------------------------------------------------------------------
r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines
Changed paths:
A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
delete for ever
------------------------------------------------------------------------
(2)結果得到添加的路徑為/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
(3)把整個庫先lock住,防止在此過程中有人繼續修改
當然如果不lock也是可以了,只不過當你把所有的內容導入到新庫中之后,還要用dumpfilter把舊庫中新增部分也導入到新庫中。為了避免不必要的麻煩,所以我們需要lock
(4)導出舊庫中的所有版本
svnadmin dump C:/myhouse/external/SVNRepos/svn > svns.dmp
(5)對導出的舊庫中的文件做過濾,剔除我們不用的那個文件的PATH
type svns.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter.dmp
(6)重新創建一個新的庫,版本最好和以前的相同。而且不要做任何的修改
svnadmin create C:/myhouse/external/SVNRepos/svndump
(7)把我們過濾后的那個導出文件,導入到新的庫中
svnadmin load C:/myhouse/external/SVNRepos/svndump < filter.dmp
(8)檢查新庫中的文件和版本狀態
[案例二]
當前庫的最新版本是48,我在第46個版本上,更加了一個5M的文件,名字為FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
現在我要把在第46個版本上新增加的5M文件徹底的刪除,不想讓它存在庫中占用空間
(1)用svn log -v命令查看添加文件時的Path。或者使用tortoisesvn之類的客戶端工具查看也可以
C:/myhouse/SCM_Home/SVN_HOME/localtest/docs/general>svn log -v "FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf"
------------------------------------------------------------------------
r46 | zhangjia | 2007-09-23 10:40:34 +0800 | 3 lines
Changed paths:
A /docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
delete for ever
------------------------------------------------------------------------
(2)結果得到添加的路徑為/docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf
(3)把整個庫先lock住,防止在此過程中有人繼續修改
(4)導出舊庫中的所有版本
svnadmin dump C:/myhouse/external/SVNRepos/svn > svns2.dmp
(5)對導出的舊庫中的文件做過濾,剔除我們不用的那個文件的PATH
type svns2.dmp | svndumpfilter exclude "docs/general/FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf" > filter2.dmp
(6)重新創建一個新的庫,版本最好和以前的相同。而且不要做任何的修改
svnadmin create C:/myhouse/external/SVNRepos/svndump2
(7)把我們過濾后的那個導出文件,導入到新的庫中
導入過程中出現提示:
...
<<< Started new transaction, based on original revision 46
------- Committed revision 46 >>>
<<< Started new transaction, based on original revision 47
* editing path : src/build/build.xml ... done.
------- Committed revision 47 >>>
<<< Started new transaction, based on original revision 48
* editing path : src/build/scmbuild.xml ... done.
------- Committed revision 48 >>>
顯然46號版本已經保留了,但是我們要刪除的那個文件也同樣被刪除了
(8)檢查新庫中的文件和版本狀態
[案例三]
當前庫的最新版本是60,我在第50個版本上,更加了一個5M的文件,名字為FY07 GDCC Training_Customer_Satisfaction_Survey v1.0 (Internal Trainer).rtf;
同時修改了10個源代碼文件;刪除了2個源代碼文件
現在我要把在第46個版本上新增加的5M文件徹底的刪除,不想讓它存在庫中占用空間
考慮一下,如果按照我們案例中提供的方法是否能夠做到保留歷史,而刪除物理文件?
並說明理由?
[總結]
刪除文件確實能夠通過我們上述的提供的方法解決,但是我們也看到如果當庫中的版本很多,容量很大的時候
每次當我們導出和導入的時候,花費的時間比較長,而且使用的空間也比較大。我們建議,
所有的導入和導出以及過濾的操作盡量在同一塊磁盤或者扇區上執行,這樣速度比較快;當然你要保證你的扇區的容量能夠容納原來倉庫至少2倍(2~4倍)的大小((1)原始的庫,(2)導出的dump,(3)導出的filter dump,(4)導入的庫)
當然你也可以copy到別的扇區,磁盤或者機器上運行,只要保證環境一致就可以
8.基於svnserve的subversion服務器在新配置權限后:svnserve.conf:12: Option expected
該問題是因為subversion讀取配置文件svnserve.conf時,無法識別有前置空格的配置文件,因此在配置文件里每行前面不能有空格
9. 怎樣讓版本庫中的項目返回至以前的某個版本?
選中本地拷貝文件夾, 右鍵->TrosiseSVN ->顯示日志 ,彈出的對話框中選中要恢復的版本,右鍵->復原到此版本。
復原到此版本只會影響本地拷貝。
你要再將你的本地拷貝提交到版本庫,最高的版本才會變動
復原至此版本: 這將會還原從那個版本以來的所有變更,使用選中的版本來替換文件/文件夾。在實際使用中發現並不是簡單的替換,如果你在當前工作復本中所做的修改不涉及到被選中版本以來的變更內容,那么你的修改會與版本N進行合並,否則這個操作會產生一個沖突。
10.如何看已刪除文件的歷史版本
TortoiseSVN:
如果是誤刪除的文件:
1.恢復該刪除文件。
用TortoiseSVN:
(1).在本地working copy中,用TortoiseSVN->Show log查看版本庫的歷史記錄。可以用search。
(2.)找到刪除該文件或者文件夾的版本,在Log message里右鍵Revert the changes from this revision。
(3).該文件或文件夾就被恢復到本地的working copy中了。如果是誤刪除的,commit到Repository里就行了。
用Eclipse的Subclipse插件:
(1)用Team->Show SVN Repository History查看版本庫的歷史記錄。
(2.) 找到刪除該文件或者文件夾的版本,右鍵Revert to XX version.
(3).該文件或文件夾就被恢復到本地的working copy中了。如果是誤刪除的,commit到Repository里就行了。
2.在該文件上右鍵TortoiseSVN->Blame 查看該文件的所有修改。
如果不是誤刪除的文件:
1.用Show log找到該文件的版本N.
2.Update to revision M(N以前的版本)。
3.本地working copy添加該文件后,查看該版本或用Blame查看該文件的所有修改(范圍選擇1到N-1)。
