我如何处理Git中的Visual Studio文件?

时间:2014-02-02 14:51:35

标签: c# git visual-studio workflow versioning

我通常使用Git进行版本控制。在我的团队中,我们并行工作,我们经常将代码提交到应用程序中。一切都很好但是Visual Studio的解决方案和项目文件。我们找到了两种方法:

  1. 永远不要提交这些文件,每个人都有自己的
  2. 在版本系统中包含这些文件
  3. 这两种方式都有优点和缺点,但基本上我们每次从中央回购中获利都会挣扎。这里有一些我们发现的备用问题:(在实施中,对上面列表的引用)

    • 我们必须在项目中包含其他文件(1)或包含我们最新的(2)
    • 如果我们处理不同的架构(x86 / x64),我们必须手动更改.csproj个文件(2)
    • 回复了引用和NuGet包的相同问题

    等等。 我可以使用适当的工作流程吗?

3 个答案:

答案 0 :(得分:17)

提交.sln.csproj文件通常是最佳做法(如this answer中所述),但合并需要引起注意。
请参阅“Why are my .csproj files getting messed up after a git rebase?”。

*.csproj -text merge=union (见下文)
*.sln -text merge=union

或者您可以放弃.csproj并在本地as in this tweet重新生成它们 忽略这些csproj文件的另一个原因是它们是否被重新生成,如in this context

yellowblood警告(in the comments)与csproj文件一起使用merge=union文件时发生的严重冲突问题。
这与文章“Merge conflicts in csproj files”相呼应 这就是为什么有一个suggestion for VS IDE should support file patterns in project files(为了修改.csproj文件,如果添加一个符合该模式的新.cs文件的话。)

  

有人建议,如果Visual Studio首先对其元素进行排序,这将有助于缓解问题   这有助于减少由Visual Studio明显的非确定性元素引起的偶然冲突   但它并没有使合并冲突的问题消失。

答案 1 :(得分:6)

在我们的项目中,我们将这些检查到版本控制中。我们从github.gitignore和简单的.gitattributes文件开始:

# Auto detect text files and perform LF normalization
* text=auto

# Custom for Visual Studio
*.cs diff=csharp

这是因为union合并策略对这些文件实际上是危险的,请参阅Merge conflicts in csproj files,了解为什么这并不总是安全且可能不是您想要的。

您通常每次都会遇到合并冲突,但在Visual Studio中它们很容易处理。一个示例案例是向解决方案添加一个新的空项目并提交它,然后让多个团队成员向项目添加不同的文件。

理论上你可以定义一个自定义合并驱动程序来更好地处理xml合并,但我还没有看到其他任何人完成它。

答案 2 :(得分:2)

现在是2020年4月8日,我的选择是将csprojsln文件标记为binary,仍然试图找到一种坚固的方法,但它仍然不存在。