C# 如何在Git中处理VisualStudio解决方案和项目文件?

C# 如何在Git中处理VisualStudio解决方案和项目文件?,c#,git,visual-studio,workflow,versioning,C#,Git,Visual Studio,Workflow,Versioning,我通常使用Git对.NET进行版本控制。在我的团队中,我们并行工作,我们经常提交代码以集成到应用程序中。除了VisualStudio的解决方案和项目文件之外,一切都很好。我们找到了两种方法: 不要提交那些文件,每个人都有自己的文件 在版本系统中包括这些文件 这两种方法都有利弊,但基本上每次我们从中央回购中撤出时都会遇到困难。下面是我们发现的一些备用问题:(在parentesis中,参考上述列表) 我们必须在项目中包含其他人的文件(1)或包含我们最新的文件(2) 如果我们在不同的体系结构(x86

我通常使用Git对.NET进行版本控制。在我的团队中,我们并行工作,我们经常提交代码以集成到应用程序中。除了VisualStudio的解决方案和项目文件之外,一切都很好。我们找到了两种方法:

  • 不要提交那些文件,每个人都有自己的文件
  • 在版本系统中包括这些文件
  • 这两种方法都有利弊,但基本上每次我们从中央回购中撤出时都会遇到困难。下面是我们发现的一些备用问题:(在parentesis中,参考上述列表)

    • 我们必须在项目中包含其他人的文件(1)或包含我们最新的文件(2)
    • 如果我们在不同的体系结构(x86/x64)上工作,我们必须手动更改
      .csproj
      文件(2)
    • 对于引用和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进行排序或支持文件模式只会掩盖这个问题。