使用Visual Studio和Ankhsvn处理csproj文件中的频繁更改

时间:2012-04-25 13:08:57

标签: visual-studio svn ankhsvn

我正在使用ankhsvn与我的朋友在Visual Studio中的项目上进行协作。

虽然我们不对相同的源文件进行更改,但我们都经常对同一个项目进行更改。

我很难理解如何告诉subversion处理VS在.csproj.sln文件中进行的自动更改。我认为有两种选择:

  1. 在常规版本控制下包含.csproj文件,然后每次我在提交之前更新我都会收到冲突,因为我的朋友已经提交给我并对.csproj文件做了一些更改。
  2. .csproj文件放入忽略列表中,然后我会遇到问题,因为我的项目不会包含我朋友所做的所有更改。
  3. 因此,无论是两种方式,我都必须解决冲突或解决依赖性问题等。

    有没有更简单的方法呢?

    感谢。

3 个答案:

答案 0 :(得分:4)

根据我的经验,#1是你唯一的选择。由于你们两个都在定期编辑.csproj,并且.csproj的性质是你的两个更改都会发生在文件的同一个区域,所以你会发生冲突。

绝对避免#2。我只能认为你想要这样做是因为你担心错误地解决冲突,并且你发现在VS中使用“添加引用”会更容易。我不这样做是因为.csproj文件中的大多数冲突解决方案(我假设你们都经常添加依赖关系)相当于在TortoiseMerge中使用“在他们之前使用我的”或反之亦然。如果您没有使用合并工具并且正在文本编辑器中进行,我建议您尝试使用TortoiseSVN,这样您就可以轻松地进行合并。

答案 1 :(得分:2)

我相信你的问题是设计的。您不应该排除项目文件。

实际上,这样做的聪明方法是将代码分成多个项目/模块/库。在这种情况下,您的项目文件可能会更改,但由于您在另一个工作文件中工作,这不是问题。所有内容都保存在一个解决方案文件中,只有在添加/删除项目时才会更改。 当然,这意味着您需要在实施之前规划您的软件项目并定义模块,但在做之前思考很少是一个糟糕的选择。

编辑:您可能还想考虑不同的版本控制系统。像mercurial或git这样的东西应该有帮助,因为你只需要拉/合并你需要的更改。

答案 2 :(得分:0)

我想快速建议处理svn下的.sln和.csproj文件。

首先完全更新您的项目。

寻找一种锁定机制,在该机制中获取对文件的锁定,其他任何人都无法对其进行更改。如果你像我一样使用TortoiseSVN,请参阅https://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-locking.html

现在快速正常添加文件(将它们添加到文件树中并告诉项目包含它)。

然后提交新文件以及编辑过的.sln和.csproj文件。

如果您的svn在提交后没有释放锁定,请立即释放。

现在你应该清楚了。您知道解决方案和项目文件适合您。但是,如果他或她在更新到新的.sln或.csproj之前编辑.sln或.csproj,它们可能无法为您的朋友工作。在这种情况下,他或她可能必须删除他们的.sln或.csproj,加载你的,然后处理其余的。 (我不知道他们是否必须再次将他们的文件添加到解决方案或项目中,或者Visual Studio是否会为他们执行此操作。)

请注意,您可以添加空文件,以便项目了解它们并使用此过程进行提交。这将很快,因此其他人不可能同时进行编辑。之后您可以随时正常编辑文件。如果你还没有写任何东西来依赖它,它应该不需要内容。如果文件需要一些内容以便它不会破坏解决方案,那么请考虑为文件提供一些您将在以后替换的有效内容。

如果有人有其他建议,我会有兴趣听到他们的意见。不过,这篇文章目前已有3年了......