2014-03-12 60 views
6

我在Visual Studio 2012和2013年的另一位開發人員正在開發。當我們在git上共享代碼時,每個Visual Studio版本都會根據自己的喜好更改.sln標題。我們得到的幾乎每一個這樣的變化承諾:VS2012和VS2013爭奪.sln標題

@@ -1,8 +1,6 @@ 
<U+FEFF> 
Microsoft Visual Studio Solution File, Format Version 12.00 
-# Visual Studio 2013 
-VisualStudioVersion = 12.0.30110.0 
-MinimumVisualStudioVersion = 10.0.40219.1 
+# Visual Studio 2012 

是否有辦法避免這種情況,比手動審查修改的.sln,只提交他們,如果他們有其他相關?

請注意,將解決方案文件添加到.gitignore是一個壞主意,因爲有效的更改並不罕見。

+4

我在2010年和2012年有同樣的問題。由於我在2012年的少數用戶,我從來沒有檢查危險的變化。然而,它很少出現,並且在'.vcxproj'文件中有一些事情(例如),我們能夠使用條件代碼使它在兩個IDE中順利運行。 – patrickvacek

+0

我們正處於項目的開始階段,似乎每三次提交都會對項目/解決方案文件進行實際更改。我想只是不承諾解決方案後來成爲一個真正的替代品。 – dancek

+1

'git add -p'也可以用於這種情況。確實如此,我不會惹惱解決方案/項目文件,但是當我這樣做時,我幾乎總是訴諸'git add -p',以確保我不會跺腳重要的東西。 – patrickvacek

回答

1

我打算繼續前進,回答一下,總結一下我在這方面的知識。在某種程度上,我認爲這是一個未解決的git問題。標準答案是「不要檢查二進制文件和元數據到VCS中」,但有時候實際情況是您需要共享一定數量的IDE /編譯配置信息,但您需要支持多個編譯器/操作系統/版本/等。

顯然,.gitignore對於真正依賴於用戶或編譯器生成的任何內容都很有用。你可以自己找出最容易被忽略的項目,或者你可以仔細閱讀許多lists available online的不同編譯器和IDE。

但是,某些文件是必需的,但仍取決於因用戶或機器而異的因素。根據我的經驗,Visual Studio C項目的.vcxproj文件在這方面已成爲違規者。問題在於VS2010和VS2012想要使用不同版本的PlatformToolset。解決方案是使用條件語句:

<PlatformToolset Condition="'$(VisualStudioVersion)' == '10.0'">v100</PlatformToolset> 
<PlatformToolset Condition="'$(VisualStudioVersion)' == '11.0'">v110</PlatformToolset> 

我不認爲這個想法適用於您的具體情況,但它可能會在很多情況下工作。對於你的情況,我認爲你必須決定什麼是「規範」版本(即選擇一個默認的編譯器/ IDE /版本/機器/無論什麼),然後任何偏離的情況都需要避免檢查衝突的部分。最簡單的方法是使用git add -p,無論是對所有更改還是僅用於已知有問題的文件。只添加對每個人都有用的部分,對於其他人,如果他們遇到了重組或其他問題,則可以使用git stash或使用git checkout -- <filename>進行爆炸。

此問題(或至少非常類似的問題)也已提出here,但在撰寫本文時,一個答案並不是很有幫助。 This也可能有一些相關的討論,但再次,與您的問題有關的真正解決方案有些缺乏。

+0

感謝您提供豐富的答案!我很高興我們沒有得到類似的問題,我們的'.csproj'文件:) – dancek

+0

沒問題!我希望有一個更優雅的解決方案,但我從來沒有聽說過一個,所以我編譯了所有我能想到並找到的建議。希望它有幫助。 :) – patrickvacek