【问题标题】:Handling frequent changes in csproj files with Visual Studio and Ankhsvn使用 Visual Studio 和 Ankhsvn 处理 csproj 文件中的频繁更改
【发布时间】:2012-04-25 13:08:57
【问题描述】:

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

尽管我们没有对相同的源文件进行更改,但我们俩都经常对同一个项目进行更改。

我很难理解如何告诉 subversion 处理 VS 在 .csproj.sln 文件中所做的自动更改。在我看来,我有两个选择:

  1. 在常规版本控制下包含.csproj 文件,然后每次我在提交前更新我都会遇到冲突,因为我的朋友在我之前提交并对.csproj 文件进行了一些更改。
  2. .csproj 文件放在忽略列表中,然后我会遇到问题,因为我的项目不会包含我朋友所做的所有更改。

所以在这两种方式中我都必须解决冲突或解决依赖问题等。

有没有更简单的方法?

谢谢。

【问题讨论】:

    标签: visual-studio svn ankhsvn


    【解决方案1】:

    根据我的经验,#1 是您唯一的选择。由于你们俩都在定期编辑 .csproj,而 .csproj 的性质是你们的两个更改都将始终发生在文件的同一区域中,因此您将遇到冲突。

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

    【讨论】:

    • 根据我的经验,如果项目有良好的技术文档,这些冲突可以最小化。所有引用、类、视图/页面/表单只能由 1 个用户/开发人员添加到项目中,所有其他人更新他们的项目,他们发现项目中已经设置了所有内容,打开类/视图/表单/页面、代码和犯罪。但是我们都知道,在开发过程中,我们需要在项目中添加很多东西和策略/逻辑的变化,这可能会导致冲突,但仍然可以通过这种方法将它们最小化......
    【解决方案2】:

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

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

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

    【讨论】:

    • 仅仅因为他正在修改 .csproj 并不意味着他没有使用不同的库和模块。他们将依赖项添加到 .csproj,这导致 添加到 .csproj。所以即使他们使用模块,他们最终也会发生冲突。
    • 你是对的,但他也没有说他使用多个项目。然而,对 csproj 文件的频繁更改通常只会在多方在同一个项目上工作时导致冲突。每个项目都存储自己的引用 afaik,因此一个项目中的更改不应影响其他项目。毕竟拆分项目可能......
    • 我不知道他的项目周围的情况,但 IMO 两个开发人员需要在同一个项目上工作并添加他们需要的任何引用是完全合理的。
    • 再次更正,但这意味着您必须合并,除非您在不同的分支上工作并在将来的某个时间合并分支。我只是想知道他们如何一直避免合并。我并不是说这是一个非常好的主意,但它确实是一个......
    【解决方案3】:

    我想对处理 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 年历史了......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-09
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多