The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何快速變更 Subversion 專用的隱藏目錄從 .svn 改成 _svn

TortoiseSVN 安裝好之後,預設 Checkout 出來的目錄中都會加上 .svn 隱藏目錄,裡面儲存了關於此目錄中所有檔案的版本資訊與變更狀態,不過我剛開始開發 ASP.NET 時(2.0),就從網路上的文件中得知「建議」將預設的 .svn 修改成 _svn,我個人是從善如流在我的開發主機都是用 _svn 命名,但是我有一台測試機上面用的還是 .svn,而長久以來也沒遇到過問題,不過今天總算被我給遇到了。

因為最近承接了一個 ASP.NET 1.1 的網站,之前開發也都還正常,但是最近開始將整個專案導入 Subversion 管理後,在其中一台開發主機就出問題了,載入專案時出現【Refreshing the project failed. Unable to retrieve folder information from the server.】的錯誤訊息,如下圖示:

Microsoft Development Environment - Refreshing the project failed. Unable to retrieve folder information from the server.

然後用此訊息查了網路上的資訊後,終於確認只要目錄種出現任何 . (小數點) 開頭的目錄或檔案,就會導致這個問題發生,所以我必須要將所有的 .svn 目錄都改成 _svn 才行,並且修改 TortoiseSVN 的設定。

首先,我們先修改 TortoiseSVN 的設定

Settings - TortoiseSVN

再來,就是修正工作目錄的所有子目錄下的 .svn 目錄,作法有兩種:

  1. 將工作目錄全部刪除,並重新簽出(Checkout)一次,不過你可能還有許多未簽入的檔案,使用此法較為不便。
  2. 手動將所有 .svn 目錄名稱改名為 _svn,不過有時專案過大,所以最方便的方式還是用批次檔修改比較快。

我寫了兩個批次檔指令,可以透過一行批次檔將所有目前目錄與所有子目錄下的 .svn 都批次改成 _svn

將 .svn 目錄名稱改成 _svn

FOR /R . %f IN (.) DO IF EXIST "%f\\.svn" attrib -H "%f\\.svn" && move "%f\\.svn" "%f\\_svn" && attrib +H "%f\\_svn"

將 _svn 目錄名稱改成 .svn

FOR /R . %f IN (.) DO IF EXIST "%f\\_svn" attrib -H "%f\\_svn" && move "%f\\_svn" "%f\\.svn" && attrib +H "%f\\.svn"

以上的指令只要開啟「命令提示字元」,並且進入該工作目錄,剪下、貼上即可執行完畢。

相關連結