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

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

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

-   **\*.suo** (Solution User Options) 方案使用者選項檔 ( 定義在整個方案中使用者自己的開發環境 )。  
    參考：[Visual Studio 中的檔案類型與副檔名](http://msdn2.microsoft.com/zh-tw/library/xhkhh4zs.aspx)
    
-   **\*.webinfo** 控制 Web 專案虛擬根目錄位置的 Web 資訊檔，這個檔可能每個人都不太一樣，所以不建議將這個檔 commit 進 SVN 版本庫。常見的有 vwd.webinfo, \*.csproj.webinfo 或 \*.vbproj.webinfo 等等。  
    參考 1：[Visual Web developer 檔案系統網站](http://msdn2.microsoft.com/zh-tw/library/e5x4xz73\(VS.80\).aspx)  
    參考 2：[ASP.NET 網站檔案類型](http://msdn2.microsoft.com/zh-tw/library/2wawkw1c\(VS.80\).aspx)
    
-   **\*.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?](http://stackoverflow.com/questions/3937160/in-the-new-visual-studio-2010-sql-server-project-type-what-is-the-dbproj-schema)
    
-   非 ASP.NET 網站專案中的 **bin** 目錄與 **obj** 目錄，此為建置輸出檔，每次編譯都會不太一樣，沒必要將這些變動的檔案簽入到 SVN 版本庫。例如 \*.dll 及 \*.exe 檔案。  
    參考：[簡介原始檔控制](http://msdn2.microsoft.com/zh-tw/library/ms171339\(VS.80\).aspx)  
    **注意**：如果你的工作環境有 **ASP.NET 網站專案** 的話，不應該把 **bin** 目錄也加入忽略清單！
    
-   **\[Tt\]est\[Rr\]esult \[Bb\]uild\[Ll\]og.\*** 目錄  
    這是利用 Visual Studio 進行單元測試與建置時的相關報告與記錄檔，你可以看情況是否要加入到忽略清單。
    
-   **\*.docstates** 檔案  
    這是 [Visual Studio Productivity Power Tools](http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/) 擴充套件的 **Document Tab Well** 所產生的檔案  
    參考：[What is .sln.docstates file created by Visual Studio Productivity Power Tools?](http://stackoverflow.com/questions/5944894/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](http://stackoverflow.com/questions/3634649/what-is-the-function-of-the-dbmdl-file-in-vs-database-project)
-   **\*resharp\* \*Resharper\* \*ReSharper\* \*.Load  \*.NoLoad  \*.~m2  \*.cache**  
    這是 [Resharper](http://www.jetbrains.com/resharper/) 工具產生的一些暫存檔，每個人的設定也會不一樣，所以可以不用簽入。
-   **\_notes** 目錄  
    這是用 Dreamwaver 編輯網頁時產生出來的目錄，每個人都會不一樣，可以不用簽入到版本庫中！
    
-   **\[Tt\]humbs.db** 檔案  
    這是 Windows 作業系統固定會產生的圖片預覽暫存檔，也可以不用簽入到 SVN 裡。
    
-   **.apdisk** 檔案  
    這是當 Mac 電腦掛載遠端 Windows 網路資料夾時會建立的一個檔案，這也不需要簽入。  
    參考：[File extension APDISK - How to open](http://www.file-extensions.org/apdisk-file-extension)
    
-   **\*.\[Pp\]ublish.xml** 檔案  
    這是透過 Visual Studio 2010 單鍵發行設定的相關檔案，你可以選擇要不要簽入，因為如果你有儲存密碼在這裡的話，密碼會透過本機的 machineKey 進行加密，所以就算其他人讀取了你的 \*.Publish.xml 檔案他也無法使用你設定的密碼，因此有些人會選擇把這個檔案設定到忽略清單，不過我個人是會把這個檔案簽入。
    
-   **AppPackages** 目錄 ( **Updated**: 2012/11/30 )  
    在開發 Windows 8 App 時，每次建置都會產生 AppPackages 這個目錄，由於每次建置都不會一樣，因此建議排除這個目錄。
    

在新版的 [TortoiseSVN](http://tortoisesvn.net/downloads.html) 裡，有個新功能稱做 **[Unversion and add to ignore list](http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-howto-unversion.html)**，這個新功能可以讓你把特定檔案或目錄從版本庫中刪除，並自動將這些檔案加入到「忽略清單」中，而且還不會刪掉你本機裡現有的這些檔案，非常的實用。

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1701657ed1d6f3d2b695-image_1419.png)

然而，透過一個目錄一個目錄的設定忽略清單，有時候真的太費工了，比較好的作法還是直接修改 [TortoiseSVN](http://tortoisesvn.net/downloads.html) 的 **Global ignore pattern** 設定，將特定檔案名稱（或目錄名稱）列在這裡，在執行簽入的時候就會自動忽略，無須再針對特定目錄設定 **svn:ignore** 屬性設定：

[![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7db9efaadf4296d99cf8-SNAGHTML49d436ad_thumb.png)](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/5fc75d8c0d90d2ba1379-SNAGHTML49d436ad.png)

以下是 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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/0b4b500f9f702275ba4b-SNAGHTML49dbcae0.png)

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

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

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

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

-   [**TSVN\_Global\_Ignore\_Pattern.reg**](https://stwillblogassets.blob.core.windows.net/files/TSVN_Global_Ignore_Pattern.reg)

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

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

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/fa21b6d32ef77c9292d7-SNAGHTML49e10b59.png)

**相關連結**

-   [What Visual Studio files should be ignored by subversion to minimize conflicts?](http://stackoverflow.com/questions/588077/what-visual-studio-files-should-be-ignored-by-subversion-to-minimize-conflicts)
-   TortoiseSVN v1.7 - [Ignoring Files And Directories](http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-ignore.html)
-   TortoiseSVN v1.7 - [TortoiseSVN's Settings](http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-settings.html)
-   TortoiseSVN v1.7 - [Ignore files which are already versioned](http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-howto-unversion.html)
-   [最新版 TortoiseSVN 下載位址](http://tortoisesvn.net/downloads.html)
