C# 如何在Git中处理VisualStudio解决方案和项目文件?
我通常使用Git对.NET进行版本控制。在我的团队中,我们并行工作,我们经常提交代码以集成到应用程序中。除了VisualStudio的解决方案和项目文件之外,一切都很好。我们找到了两种方法:C# 如何在Git中处理VisualStudio解决方案和项目文件?,c#,git,visual-studio,workflow,versioning,C#,Git,Visual Studio,Workflow,Versioning,我通常使用Git对.NET进行版本控制。在我的团队中,我们并行工作,我们经常提交代码以集成到应用程序中。除了VisualStudio的解决方案和项目文件之外,一切都很好。我们找到了两种方法: 不要提交那些文件,每个人都有自己的文件 在版本系统中包括这些文件 这两种方法都有利弊,但基本上每次我们从中央回购中撤出时都会遇到困难。下面是我们发现的一些备用问题:(在parentesis中,参考上述列表) 我们必须在项目中包含其他人的文件(1)或包含我们最新的文件(2) 如果我们在不同的体系结构(x86
- 我们必须在项目中包含其他人的文件(1)或包含我们最新的文件(2)
- 如果我们在不同的体系结构(x86/x64)上工作,我们必须手动更改
文件(2).csproj
- 对于引用和NuGet包,回答了相同的问题
等等我可以使用适当的工作流吗?提交
.sln
和.csproj
文件通常是最佳做法(如中),但合并需要注意。见“”
*.csproj-text merge=union
(见下文)*.sln-text merge=union
v
或者您可以放弃.csproj
并在本地重新生成它们。忽略这些csproj文件的另一个原因是如果重新生成它们,如下所示 与
merge=union
策略一起使用时,警告()与csproj
文件存在严重冲突问题。这与文章的内容相呼应。
这就是为什么会有一个文件(为了不修改
.csproj
文件,如果添加一个符合该模式的新.cs
文件)
有人建议,如果Visual Studio首先对其元素进行排序,这将有助于缓解问题。这有助于减少Visual Studio明显的非确定性元素引起的偶然冲突。
但这并不能消除合并冲突的问题
在我们的项目中,我们将这些检查到版本控制中。我们从中的
.gitignore
和一个简单的.gitattributes
文件开始:
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
这是因为union
合并策略实际上对这些文件是危险的,有关详细信息,请参阅为什么这并不总是安全的,并且可能不是您想要的
通常每次都会出现合并冲突,但在VisualStudio中很容易快速处理。一个例子是向解决方案添加一个新的空项目并提交它,然后让多个团队成员向该项目添加不同的文件
理论上,您可以定义一个定制的合并驱动程序来更好地处理xml合并,但我还没有看到其他人这样做。现在是2020-04-08年,我选择mark
csproj
和sln
文件作为二进制文件,仍然试图找到一个可靠的实践,但它仍然不存在 我还生成了许多VS项目*.suo文件。将*.suo
添加到.gitignore文件中。另外,您还需要将每个项目的bin/*文件添加到忽略文件中。它们都是二进制文件。另外,如果您使用MS Test或其他单元测试框架,请添加TestResults
文件夹。csproj不应具有merge=union,它可能会导致非常糟糕的合并。@yellowblood good point。我对答案进行了编辑,以明确这一风险,并添加了一些链接来支持这一建议(不要对.csproj
文件使用merge=union
)。文件顺序在.fsproj文件中很重要,因此对.csproj进行排序或支持文件模式只会掩盖这个问题。