TortoiseSVN特別版是程序開發人員必須的管理軟件,通過TortoiseSVN可以讓用戶更加便捷的管理程序的開發進度和程序測試,以此適合數人協同合作開發,在網站設計之時,用戶更加需要用到TortoiseSVN,使得用戶更加高效的進行工作。
可選的網絡層
Subversion 在版本庫訪問方面有一個抽象概念,利于人們去實現新的網絡機制,Subversion 的“高級”服務器是 Apache 網絡服務器的一個模塊,使用 HTTP 的變種協議 WebDAV/DeltaV 通訊,這給了 Subversion 在穩定性和交互性方面很大的好處,可以直接使用服務器的特性,例如認證、授權、傳輸壓縮和版本庫瀏覽等等。也有一個輕型的,單獨運行的 Subversion 服務器,這個服務器使用自己的協議,可以輕松的用 SSH 封裝。
數據處理
Subversion 使用二進制文件差異算法展現文件的區別,對于文本(人類可讀)和二進制(人類不可讀)文件具備一致的操作方式,兩種類型的文件都壓縮存放在版本庫中,差異在網絡上雙向傳遞。
高效的分支和標簽
分支與標簽的代價不與工程的大小成比例,Subversion 建立分支與標簽時只是復制項目,使用了一種類似于硬鏈接的機制,因而這類操作通常只會花費很少并且相對固定的時間,以及很小的版本庫空間。
維護能力
Subversion 沒有歷史負擔,它由一系列良好的共享 C 庫實現,具有定義良好的 API,這使 Subversion 非常容易維護,可以輕易的被其他語言和程序使用。
外殼集成
TortoiseSVN 與Windows 外殼(例如資源管理器)無縫集成,你可以保持在熟悉的工具上工作,不需要在每次使用版本控制功能時切換應用程序。
并且你不一定必須使用 Windows 資源管理器,TortoiseSVN 的右鍵菜單可以工作在其他文件管理器,以及文件/打開對話框等標準的 Windows 應用程序中。你必須牢記,TortoiseSVN 是有意作為 Windows 資源管理器的擴展開發,因此在其他程序可能集成的并不完整,例如重載圖標可能不會顯示。
重載圖標
每個版本控制的文件和目錄的狀態使用小的重載圖標表示,可以讓你立刻看出工作副本的狀態。簡便訪問Subversion 命令的簡便訪問所有的 Subversion 命令存在于資源管理器的右鍵菜單,TortoiseSVN 在那里添加子菜單。因為 TortoiseSVN 是一個 Subversion 客戶端,我們也很愿意為你展示一些 Subversion 本身的特性:
目錄版本控制
CVS 只能追蹤單個文件的歷史,但是 Subversion 實現了一個“虛擬”文件系統,可以追蹤整個目錄樹的修改,文件和目錄都是版本控制的,結果就是可以在客戶端對文件和目錄執行移動和復制命令。
原子提交
提交要么完全進入版本庫,要么一點都沒有,這允許開發者以一個邏輯塊提交修改。版本控制的元數據每個文件和目錄都有一組附加的“屬性”,你可以發明和保存任意的鍵/值對,屬性是版本控制的,就像文件內容。
1、軟件支持可選的網絡層。
2、軟件支持一鍵處理數據。
3、軟件支持高校的分支和標簽。
4、軟件為用戶提供了良好的維護能力。
5、軟件集成了外殼功能。
1、建立一個 runoob01 的工作目錄
所謂的 runoob01 目錄其實就是您平常用來存放工作檔案的地方。通常我們會等到自己的工作做的一個段落的時候再進行備份。所以我們平常都是在 runoob01 目錄下面工作,等到適當時機在 commit 到 repository 中。舉例來說,我們想在 D 盤下面建立一個名為 runoob01 的目錄。首先先把這個目錄建立出來。
2、進入創建的目錄,在空白處按下右鍵后(您可以在 MyWork 目錄的 icon 上按,也可進入 MyWork 目錄后,在空白的地方按),選擇 SVN 檢出
3、接著您可以看到如下的畫面:
首先我們要填入的是 repository(版本庫)的位置,對于 SVN 來說,repository 的位置都是 URL。版本庫 URL 這里填入我們測試的版本倉庫地址 svn://10.0.4.17/runoob01。
4、接著,稍微看一下 Checkout directory(檢出至目錄),這個字段應該要指向您的 runoob01 目錄。
5、確認后,按下 OK 按鈕,您應該可以看到如下的信息窗口。
6、這樣就表示動作完成。按下 OK 按鈕后,再到您剛剛建立的目錄下。您將會看到 MyWork 目錄下面多了一個名為 .svn 的目錄(這個目錄是隱藏的,如果您的檔案管理員沒有設定可以看到隱藏目錄,您將無法看到它) 。
如果您要在一個已經存在的 SVN Server 上面 checkout 出上面的檔案,您只需要給定正確的 SVN URL 以及要 checkout 目錄的名稱。就可以取得指定的檔案及目錄了。
1、在電腦空白處點擊鼠標右鍵,在彈出的選項中點擊【TortoiseSVN】選項,在二級菜單中點擊【設置】。
2、在打開的設置窗口中點擊【已保存數據】選項。
3、然后在右側界面中找到紅框標注出的選項,點擊【清除】選項。
4、然后會打開一個窗口,選擇您要切換的用戶信息,并在前面打鉤,打鉤后點擊【確定】就可以了。
5、重新登錄TortoiseSVN軟件,需要您輸入用戶名和密碼,輸入完成后點擊【確定】就可以了。
1、無法復制/移動‘XXX.svn-base‘到’XXX.tmp‘:系統找不到指定文件。
這個錯誤信息通常在你更新工作拷貝時出現,可能的原因有兩個:
版本庫中有兩個文件的名字只是大小寫不同,這在Windows下是不允許簽出的,因為Windows的文件系統是大小寫不敏感的。很可能其中一個文件是誤添加的,所以你要找出是哪一個,然后刪除它,以確保不會把更改提交到錯誤的文件。
某個文件的文件名是非法的(對Windows來說非法),比如,“con”, “lpr”, “com”都是非法的,因為這些都是設備名。當然,含有“//*?:|”和其它特殊字符在Windows(NTFS 和 FAT)也是不允許的。
是,我們知道這個錯誤信息對解決問題沒什么實質性的幫助,但這個錯誤信息是來自Subversion庫的,我們改不了。
有幾個辦法可以避免這個問題,請看 這里。
2、無法打開文件’XXX/nnn-n.txn/changes‘:無法訪問,文件正被其它程序使用。
通常報告這個錯誤的人都說這個問題是隨機發生的,并且通常會在一次大的提交中發生。重新提交可能成功,也可能在別的地方出錯。
最有可能的原因是,有一個病毒掃描程序正在非正常地占用這個文件。你可以試著禁用病毒掃描,或者讓它忽略你的版本庫文件。
類似的錯誤也可能發生在你的工作拷貝,試試讓它忽略 .svn 文件夾。
3、添加‘XXX’失敗:同名對象已存在。
這個錯誤通常是在你更新工作拷貝時發生。之所以拋出這個錯誤是因為Subversion絕對不會擅自刪除或者覆蓋你已有的本地文件。有三個可能原因會導致這個錯誤:
你有一個未納入版本控制的本地文件,名字跟其他人已添加的文件一樣。這種情況下你可以先移走或者重命名你的本地文件再更新。之后你可以決定是需要合并還是把你的文件改個名字。
版本庫中的一個文件被重命名了,但只是大小寫不一樣,如 Install.txt 改為 install.txt,而你在本地作了修改。當你更新時就會遇到第一種情況,你修改過的本地文件被視為未納入版本控制。將它移到其它地方,再更新,問題解決。
版本庫中有兩個文件的名字只是大小寫不同,這在 Windows 下是 不 允許簽出的,因為 Windows 的文件系統是大小寫不敏感的。很可能其中一個文件是誤添加的,所以你要找出是哪一個,然后刪除它,以確保不 會把更改提交到錯誤的文件。
4、OPTIONS of ’《path》‘: 401 Authorization Required 《url》
升級到 1.4.x 版之后,你發現無法訪問版本庫了,每次都出這個錯: OPTIONS of ’path‘: 401 Authorization Required ’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、工作拷貝已過期
這個錯誤是在提交修改的時候出現的,通常是因為在版本庫里,你想要提交的文件已經被其他人修改了。
這時你要先用 更新 命令更新的的工作拷貝到版本庫當前的版本。
你可能會不明白為什么要這么做,尤其是在你 確知 版本庫并沒有被修改過的情況下。答案很簡單,因為提交的時候,并不會徹底更新你的工作拷貝,而只是那些修改的文件會被自動更新。舉個例子,有個新建的版本庫:
Add Folder in revision 1
Add File1 and File2 in revision 2
Modify File1 and commit in revision 3
現在版本庫處于修訂版本 3,但你的工作拷貝的版本會是這個樣子:
Folder : revision 1
Folder/File1 : revision 3
Folder/File2 : revision 2
這時如果你修改 File2 然后提交,就會失敗。因為客戶端告訴版本庫 File2 是在版本 2 的基礎上作修改的,但是版本庫已經處于版本 3 了。如果此時你執行更新命令,就會將 File2 也變成版本 3 (當然,你的本地修改還會在的)。
這個錯誤還可能在你試圖創建分支或標記時出現。答案永遠都是:如果工作拷貝已經過期,那就更新唄!
7、無法寫到標準輸出
TortoisePlink 使用的是標準的 plink 代碼,但不是針對 Windows 編譯的,因而無法正常發送錯誤信息。在 TSVN 的設置 -》 網絡里,將 SSH 客戶端指向標準 plink,錯誤信息就會輸出到一個命令行窗口中。設置好之后再像之前一樣運行 TortoisePlink。
“無法寫到標準輸出” 表示 Plink 想要拋出一個錯誤,但是因為 TortoisePlink 并沒有提供一個 DOS 窗口,所以就沒沒有標準輸出來接收這個錯誤信息。
知道是設置有問題后,可以先使用普通的 plink 程序,看到底是什么錯誤,解決它。
如果普通 plink 掛住了,那就是參數不對(設置 -》 網絡)。
另一個可能是 SSH 后臺程序找不到 svnserve 可執行文件。以你將要使用的用戶(此處為 myuser)登錄到服務器,輸入 “which svnserve”,如果沒有顯示指向可執行文件的路徑,就把該文件(以及其它 Subversion可執行文件)設為對于該用戶可全局訪問。
8、400 服務器未能理解請求(400 Bad Request)
REPORT request failed on ’。。。‘ REPORT of ’。。。‘: 400 Bad Request (http://。。。)
你的 DAV 請求被防火墻阻止了,多數防火墻都會這么這么干。你可以讓你的管理員更改防火墻的設置,或者以 https 訪問,如 https://svn.collab.net/repos/svn/ ,這樣你與版本庫之間的通信是經過 SSL 加密的,防火墻無法阻止(如果它沒有封掉 SSL 端口的話)。
另外,現已確認某些病毒掃描程序(如卡巴斯基)也會導致這個錯誤。
9、403 對被請求頁面的訪問被禁止(403 Forbidden)
PROPFIND request failed: 403 Forbidden
這有可能因為你試圖訪問版本庫的父目錄(而不是版本庫本身)。你可以試著在 URL 尾部指定版本庫的名字,還有別忘了名字后面的斜杠 ‘/’。
有關導致此錯誤的真正原因,請查看 Apache 的錯誤日志。
10、405 HTTP Method Not Allowed
PROPFIND Request Failed - Error 405 HTTP Method Not Allowed
這個錯誤有幾種形式,可能的原因有以下幾個:
PROPFIND Request Failed 你試圖使用較低版本的TortoiseSVN瀏覽版本庫的父目錄。你可以試著在 URL 尾部指定版本庫的名字,或者升級TortoiseSVN到 1.2.3 版或更高。
PROPFIND Request Failed 你漏了 URL 末尾的斜杠 ‘/’,較舊版本的 TSVN 要求在版本庫名字后必須有斜杠,否則它會砍掉版本庫名字,等于試圖去訪問它的父目錄。
PROPFIND Request Failed 你可能正嘗試通過一個不允許 DAV 請求的代理訪問版本庫。通常你用網頁瀏覽器瀏覽版本庫是沒問題的,只在使用 svn 客戶端時才出錯。你必須配置你的代理服務器或防火墻,以讓 DAV 請求通過,或者使用 https 來訪問,多數代理服務器無法分析加密過的信息包,因而也就無法阻止 DAV 請求了。
另一個可能是你正在運行病毒掃描程序或防火墻,很多此類軟件會在你根本不知道的情況下就阻止了 DAV 請求,可以試一下禁用它們。
Lock Request Failed 你嘗試在工作拷貝中鎖定一個文件,而這個文件在版本庫中已經不存在了。你需要先更新工作拷貝。
1.修復若干bug;
2.優化細節問題;