The Will Will Web

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

請勿將某些檔案類型的檔案簽入到 Subversion 版本庫 (二版)

我四年前曾經寫過一篇【請勿將某些檔案類型的檔案簽入到 Subversion 版本庫】文章,不過這幾年下來,每個新人都還是會先犯一次錯,然後才會看到這篇文章,所以我才思考說怎樣才能避免錯誤再次發生,因此這篇文章除了補充這幾年額外新增且應該被忽略簽入的檔案類型外,也提供另一個更加完美的解決方案,透過機碼設定就可以一勞永逸的解決公司內開發人員發生錯誤簽入檔案或目錄的機會。

以下重新整理目前我已知的檔案類型目錄名稱,請不要將以下檔案簽入 (commit) 到 SVN 版本庫中:

  • *.suo (Solution User Options) 方案使用者選項檔 ( 定義在整個方案中使用者自己的開發環境 )。
    參考:Visual Studio 中的檔案類型與副檔名
  • *.webinfo 控制 Web 專案虛擬根目錄位置的 Web 資訊檔,這個檔可能每個人都不太一樣,所以不建議將這個檔 commit 進 SVN 版本庫。常見的有 vwd.webinfo, *.csproj.webinfo 或 *.vbproj.webinfo 等等。
    參考 1:Visual Web developer 檔案系統網站
    參考 2:ASP.NET 網站檔案類型
  • *.csproj.user ( 在 VB.NET 是 *.vbproj.user )
    專案使用者選項檔,這裡會儲存 Visual Studio 所有該使用者相關的環境選項,例如正開啟哪些檔案、游標停在哪幾行之類的。
  • *.dbproj.schemaview 檔案
    這是 VS2010 資料庫專案的暫存檔,每個使用者都不會一樣,因此應該列入忽略清單之中。
    參考:In the new Visual Studio 2010 SQL Server project type, what is the .dbproj.schemaview file for?
  • 非 ASP.NET 網站專案中的 bin 目錄與 obj 目錄,此為建置輸出檔,每次編譯都會不太一樣,沒必要將這些變動的檔案簽入到 SVN 版本庫。例如 *.dll 及 *.exe 檔案。
    參考:簡介原始檔控制
    注意:如果你的工作環境有 ASP.NET 網站專案 的話,不應該把 bin 目錄也加入忽略清單!
  • [Tt]est[Rr]esult [Bb]uild[Ll]og.* 目錄
    這是利用 Visual Studio 進行單元測試與建置時的相關報告與記錄檔,你可以看情況是否要加入到忽略清單。
  • *.docstates 檔案
    這是 Visual Studio Productivity Power Tools 擴充套件的 Document Tab Well 所產生的檔案
    參考:What is .sln.docstates file created by Visual Studio Productivity Power Tools?
  • *.gpState 檔案
    參考:what is the .gpstate file for?
  • *.dbmdl 檔案
    參考:What is the function of the DBMDL File in VS database project
  • *resharp* *Resharper* *ReSharper* *.Load  *.NoLoad  *.~m2  *.cache
    這是 Resharper 工具產生的一些暫存檔,每個人的設定也會不一樣,所以可以不用簽入。
  • _notes 目錄
    這是用 Dreamwaver 編輯網頁時產生出來的目錄,每個人都會不一樣,可以不用簽入到版本庫中!
  • [Tt]humbs.db 檔案
    這是 Windows 作業系統固定會產生的圖片預覽暫存檔,也可以不用簽入到 SVN 裡。
  • .apdisk 檔案
    這是當 Mac 電腦掛載遠端 Windows 網路資料夾時會建立的一個檔案,這也不需要簽入。
    參考:File extension APDISK - How to open
  • *.[Pp]ublish.xml 檔案
    這是透過 Visual Studio 2010 單鍵發行設定的相關檔案,你可以選擇要不要簽入,因為如果你有儲存密碼在這裡的話,密碼會透過本機的 machineKey 進行加密,所以就算其他人讀取了你的 *.Publish.xml 檔案他也無法使用你設定的密碼,因此有些人會選擇把這個檔案設定到忽略清單,不過我個人是會把這個檔案簽入。
  • AppPackages 目錄 ( Updated: 2012/11/30 )
    在開發 Windows 8 App 時,每次建置都會產生 AppPackages 這個目錄,由於每次建置都不會一樣,因此建議排除這個目錄。

在新版的 TortoiseSVN 裡,有個新功能稱做 Unversion and add to ignore list,這個新功能可以讓你把特定檔案或目錄從版本庫中刪除,並自動將這些檔案加入到「忽略清單」中,而且還不會刪掉你本機裡現有的這些檔案,非常的實用。

然而,透過一個目錄一個目錄的設定忽略清單,有時候真的太費工了,比較好的作法還是直接修改 TortoiseSVNGlobal ignore pattern 設定,將特定檔案名稱(或目錄名稱)列在這裡,在執行簽入的時候就會自動忽略,無須再針對特定目錄設定 svn:ignore 屬性設定:

以下是 SVN 預設的 pattern 清單:

*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store

我們可以自由加上文章稍早所介紹的那些檔案類型與目錄名稱上去,以下是我自己的 Pattern 設定:

*.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo *.rej *~ #*# .#* .*.swp .DS_Store *.suo *.webinfo *.user *.dbproj.schemaview *.docstates *.gpState *.dbmdl [Tt]est[Rr]esult [Bb]uild[Ll]og.* _notes [Tt]humbs.db .apdisk *resharp* *Resharper* *ReSharper* *.Load  *.NoLoad  *.~m2  *.cache bin obj AppPackages

上述這些設定,你還是可以自行決定哪些目錄是否應該設定到 Global ignore pattern 裡,如果不知道的話,那就直接剪下貼上應該不會有太大問題才是。

這些設定事實上是儲存在 Windows 機碼裡,位置在:HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany

因此,要給所有開發團隊套用一樣的 Global ignore pattern 設定,最簡單的方法就是一個人做好設定,再把這個機碼給匯出,然後再傳給同事進行套用即可一勞永逸!

以下是匯出該機碼的指令(透過 C:\Windows\System32\reg.exe 工具,所有電腦應該都有內建此工具)

reg export HKCU\Software\Tigris.org\Subversion\Config\miscellany TSVN_Global_Ignore_Pattern.reg

以下是我電腦的 Registry 版本,懶人以直接下載套用即可:

請注意:如果你的工作環境有 ASP.NET 網站專案 的話,不應該把 bin 目錄也加入忽略清單!如果想直接套用我設定的人,要從 Global ignore pattern 移除 bin 目錄的設定。

套用完成後,你如果重新建立一個新的版本庫,並第一次準備簽入時,就會發現你的簽入視窗變的非常乾淨,所有不相關的檔案與目錄全部都被自動忽略了!

 

相關連結