這似乎是一個非常基本的問題,但我很想知道答案。我使用Subversion(SVN)進行源代碼控制,並且我一直在檢查所有文件,但客戶端要求我在SVN中創建規則以避免檢查bin
和obj
文件夾。
爲什麼我不檢查bin
和obj
文件夾?爲什麼我不應該檢查SVN中的bin和obj文件夾
客戶端還要求我將解決方案文件保存在存儲庫文件夾之外。這是爲什麼?
這似乎是一個非常基本的問題,但我很想知道答案。我使用Subversion(SVN)進行源代碼控制,並且我一直在檢查所有文件,但客戶端要求我在SVN中創建規則以避免檢查bin
和obj
文件夾。
爲什麼我不檢查bin
和obj
文件夾?爲什麼我不應該檢查SVN中的bin和obj文件夾
客戶端還要求我將解決方案文件保存在存儲庫文件夾之外。這是爲什麼?
你不應該添加任何臨時文件到SVN,它們是臨時的。整個obj目錄由在構建過程中創建的文件組成,然後被丟棄。 (當然,它們會保留在磁盤上,因爲有些是重用的,就像緩存一樣,當源文件沒有改變時,這是他們每次構建後都不會被刪除的唯一原因)。
bin目錄是一個稍微不同的問題。將二進制文件添加到SVN是可以的,您可能已經爲圖標和圖像文件做好了準備。有些人也添加了構建的二進制文件,這是一個取決於您的配置管理過程的決定,沒有「錯誤的」答案。但是,有時您的bin目錄可能會被其他您不想添加的文件填滿。如果你正在構建.net應用程序,你會得到一大堆複製到bin目錄的依賴dll,這些不是你的項目的一部分。添加這些只會讓你的倉庫膨脹無益。同樣,bin中也有支持的二進制文件,例如.pdb調試符號文件。這些也不是真的需要。
對於解決方案文件,我不知道這個問題,但如果它不是在檢查它會因爲一個.sln文件只是一個「包裝」爲一個或多個項目文件。它不是嚴格需要建立一個視覺工作室項目作爲一個新的將根據需要創建。我想你的用戶可能會創建自己的.sln文件,其中包含不同的項目組,使每個用戶都有不同的項目。這將是防止簽入的原因,因此每個用戶都不會覆蓋彼此的自定義文件(儘管用戶可以防止修改存儲在svn中的文件)。
因此,聽起來好像您的配置策略不涉及向svn添加任何二進制文件。在這種情況下,它是一個非常好的主意,可以防止這種情況通過預先提交的鉤子而意外發生。我還建議將這些排除項添加到客戶端的全局忽略中,以幫助您的用戶永遠嘗試添加這些文件。
「不應該」不適用於每個人。但一般:
1)不要籤,可以從代碼生成的二進制文件。
2)SVN是一個源代碼版本的系統,而不是設計時考慮的二進制文件。是的,SVN和其他VCS可以處理二進制文件,但這不是它們的預期目的,特別是在1)之後
3)由於這些是由您的源代碼生成的,它們會改變很多,並且不像庫很少變化。由於任何VCS都無法正確處理二進制文件,因此經常更改二進制文件會對VCS徵稅,並且由於差異(delta)效率不如源代碼那麼高效,因此每次更改二進制文件時都傾向於存儲更多內容。
來到解決方案(.sln)文件,它是理想的他們簽入到存儲庫中,雖然不是絕對必要的。但是大部分(如果不是全部的話).Net項目都是基於Visual Studio的,即使是爲了構建目的,擁有.sln文件也可以讓工作更容易,因爲您可以在sln文件而不是csproj(或其他項目)文件上調用msbuild。你得到其他優點喜歡適當的依賴編譯,編譯並行等
你真的不應該檢查你做你的支票會remerging重新編譯的輸出變化的任何用戶特定的文件或生成的輸出文件作爲每次。我建議忽略bin,obj和.suo(不是.sln)作爲起點,因爲這些將通過編譯來重新創建,然後忽略任何用戶特定的或每個構建都重新生成的其他對象。
爲什麼選擇downvote?至少留下一個commet爲什麼大聲笑。如果你認爲自己知道答案,也要回答自己。 –
有+1,對我來說似乎有點苛刻 - 「不檢查用戶特定文件」是個不錯的建議。 – gbjbaanb
@gbjbaanb。謝謝,你的回答是我正在提出的觀點的擴展版本,我同意你的回答。 –
+1同意你的回答,這擴大了我在我下面的答案中提出的觀點。 –
@gbjbaand很棒的回答!特別是我認爲你對.sln文件所說的話是我的客戶不希望我重寫.sln文件的正確原因。 – VJAI
順便說一句,如果您確實添加了一個並且不希望本地更改被提交,您可以在sln文件上設置「ignore-on-commit」更改列表。 – gbjbaanb