git - VS2012 和 VS2013 争夺 .sln header

标签 git visual-studio-2012 visual-studio-2013 solution

我在 Visual Studio 2012 上开发,另一个开发者在 2013 上开发。当我们在 git 上共享代码时,每个 Visual Studio 版本都会根据自己的喜好更改 .sln header 。我们几乎在每次提交时都会得到这样的更改:

@@ -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 不是一个好主意,因为有效的更改并不少见。

最佳答案

我将继续回答,只是为了总结我在这个主题上的一些知识。在某种程度上,我认为这是 git Unresolved 问题。标准答案是“不要将二进制文件和元数据检查到 VCS 中”,但有时现实是您需要共享一些 IDE/编译配置信息,但您需要支持多个编译器/操作系统/版本/等。

显然,.gitignore对于任何真正依赖于用户或编译器生成的东西都是有用的。您可以自己找出最容易忽略的最佳项目,或者您可以仔细阅读许多 lists available online适用于不同的编译器和 IDE。

但是,有些文件是必需的,但仍取决于因用户或机器而异的因素。根据我的经验,.vcxproj Visual Studio C 项目的文件就属于这种情况。问题是 VS2010 和 VS2012 想要使用不同版本的 PlatformToolset .解决方案是使用条件语句:

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

我不认为这个想法适用于您的特定情况,但它可能适用于许多情况。对于您的情况,我认为您必须决定“规范”版本是什么(即选择默认的编译器/IDE/版本/机器/等等),然后任何偏离该版本的情况都需要避免检查冲突部分.最简单的方法是使用 git add -p ,无论是针对您的所有更改还是仅针对已知有问题的文件。只添加对每个人都有用的部分,对于其余部分,如果它们妨碍了 rebase 或其他东西,你可以 git stash他们或用git checkout -- <filename>炸毁他们在你提交了重要的部分之后。

这个问题(或至少一个非常相似的问题)也已被提出 here ,但在撰写本文时,一个答案并不是很有帮助。 This可能也有一些相关的讨论,但同样,与您的问题相关的真正解决方案有些缺乏。

关于git - VS2012 和 VS2013 争夺 .sln header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22352749/

相关文章:

visual-studio - Visual Studio发布管理-具有多行值的配置变量?

eclipse - 在 Egit 中导入项目的正确方法?

git - 是否可以使用 Dropbox 托管一个裸 Git 存储库来共享代码?

code-analysis - 如何防止 Visual Studio 在每次构建后切换到“代码分析”选项卡?

tfs - 如何避免在不使用忽略属性的 mstest 中运行测试?

visual-studio-2013 - 找不到 AjaxControlToolkit 的 AjaxMin.dll 路径的一部分

c# - 从存储过程调用C#返回错误代码

git - 'git reset --hard HEAD~1' 和 'git reset --soft HEAD~1' 有什么区别?

xcode - 本地存储库已过时

sql - 在 Visual Studio 中复制列标题以及查询结果