如何处理在git中的.csproj文件

7
我们正在使用Visual Studio 2015和git协同开发一个项目,这个方案还算不错,但是有一个问题就是每次添加新文件时,.csproj文件(项目文件)都会自动更改。因此,如果两个或多个人将文件添加到其本地版本,则需要从最后一个提交的人进行合并。
有没有办法避免这种情况?
编辑:我可以获取(fetch),但不能拉取(pull)或提交(commit)。如果我试图拉取(pull),Visual Studio Git想要将远程的.csproj文件与我的本地版本合并。然而,它无法自动完成此操作,我所做的每一次尝试都导致.csproj文件无法正常工作。
3个回答

8
Visual Studio创建的.csproj文件是XML数据。Git对XML一无所知,它试图将其作为普通文本文件合并。结果很少是有效的XML,更不可能像功能性那样。
默认情况下,当Git无法合并这些XML文件时,您通常会遇到“合并冲突”:Git会停止并让您修复混乱。你需要自己把它搞定。我不知道VS是否提供任何帮助工具(我避免使用Windows)。还可以参考这个问题的描述(此链接也在链接问题的答案中,但我认为我应该在这里直接包含它)。
有些人尝试使用联合合并来完全自动化合并这些XML文件,以便没有Git冲突。这不是一个好主意。有关详细信息,请参见VS 2013 C#和Git:.csproj文件在拉取时不会合并

感谢您的反馈。我没有避免使用Windows/C#.NET的选择,因为这不是由我决定的工具。如果我找到了合理的解决方案,我会回答您的问题。再次感谢。 - Jakob Busk Sørensen
“(我避免使用Windows)” - 这让我咯咯笑了。 - Ruslan

0

对于任何在5年后阅读此问题的人:如果您仍然遇到困难,可能需要升级到.NET 6(或更高版本)。现在.csproj文件要小得多,从而导致更少的合并冲突。


-2

不需要。你试过这样的流程吗?有很多冲突吗?Git中的合并冲突不是在几个人修改一个文件时发生,而是在几个人修改同一行时发生。说实话,Git不存储文件,而是存储内容。文件只是人类处理内容的常见方式。

所以我的答案是尝试一下,看看是否存在问题,因为Git的自动解决程序非常聪明,有可能你的问题不存在。


所以基本上,我不需要在每次提交之前进行拉取操作,只需提交并让 Git 合并 .csproj 文件即可? - Jakob Busk Sørensen
不行。你不能在未获取远程更改的情况下推送。我不是.NET开发人员,但我认为.csproj不应该有太多问题。你经常遇到这些问题吗?如果是,那么可能存在不同的问题。 - Hauleth
每当提交包含对 .csproj 的更改时,我就不能进行获取/拉取操作(因为这会覆盖我的修改过的 .csproj 文件)。特别是在开发早期,有很多文件的添加和重命名,这使得这种情况经常发生... - Jakob Busk Sørensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接