我们有一个解决方案文件,其中包含适用于多个平台的多个应用程序。在开发用户故事时,可以选择 10 个项目作为默认启动项目。不幸的是,StartupItem 存储在 sln 文件中,因此会导致我们的版本控制系统中出现不希望的合并(或更糟糕的是:冲突)。据我了解,Visual Studio 有一个 .suo 文件来为每个用户存储这些类型的设置。
为什么 Xamarin Studio 将 StartupItem 存储在 sln 文件中?是否支持 suo 文件?或者这个提交乒乓球还有其他解决方法吗?
我们有一个解决方案文件,其中包含适用于多个平台的多个应用程序。在开发用户故事时,可以选择 10 个项目作为默认启动项目。不幸的是,StartupItem 存储在 sln 文件中,因此会导致我们的版本控制系统中出现不希望的合并(或更糟糕的是:冲突)。据我了解,Visual Studio 有一个 .suo 文件来为每个用户存储这些类型的设置。
为什么 Xamarin Studio 将 StartupItem 存储在 sln 文件中?是否支持 suo 文件?或者这个提交乒乓球还有其他解决方法吗?
如果您使用 Git 作为版本控制系统,您可以轻松地为特定文件定义过滤器,如本答案所示:
*.sln filter=startupitem
在本地文件中定义新过滤器.gitattributes
或在.git/info/attributes
.git config filter.startupitem.clean "sed '/StartupItem\ =\ .*.csproj/'d"
通过命令行定义此过滤器的行为。(您也可以使用该--global
选项。)Git 仍会将解决方案文件列为未提交的更改。但是当将文件添加到阶段时,过滤器被应用并且该行消失了。
结帐后,此行丢失,Xamarin 设置了一些默认启动项目。从现在开始,您可以切换项目而无需签入您的选择。Xamarin 只会在本地将该行添加回*.sln
文件。
请注意 - Xamarin 已在 5.7 版中修复了此问题:
http://developer.xamarin.com/releases/studio/xamarin.studio_5.7/xamarin.studio_5.7/
来自发行说明:“启动项目名称现在存储在用户解决方案设置文件中,而不是 .sln 文件中。”
所以 >= v 5.7 不需要过滤器或任何特殊的东西。
一种解决方案是在您签入时逐个查看对文件的更改。因此,除非添加了新项目,否则不应签入解决方案文件。
我们在工作中所做的下一个级别是使用 premake 构建解决方案文件。因此,我们不再签入 .sln 或 .vcproj 文件,因为它们是在签出后自动构建的。这个解决方案是为了解决项目文件变化很大,所以e开发中心没有听从“检查你的变化”的第一条规则