0

我在 VS 2010 express 项目中使用 TotoiseSVN 客户端和 Assembla 后端。我们遇到了 VS 文件夹(或过滤器)删除和文件有时未添加到项目中的问题。我注意到当我提交 .vcxproj 和 .vcxproj.filters 文件时,默认情况下从不检查它们,即使它们应该更改。所以我手动检查它们,并在他们提交时告诉其他人。

如果团队成员 A 签出,仅更改一些代码,而团队成员 B 签出项目并将文件添加到项目中,这可能会导致问题。如果团队成员 B 然后在团队成员 A 之前提交,则团队成员 A 的项目文件没有团队成员 B 添加的新文件,所以现在他的项目覆盖了团队成员 B 他签入的项目文件,现在新添加的文件不在该项目。

除了具有惊人的协调性外,我们如何解决这个问题?

4

2 回答 2

1

我怀疑这里可能发生的事情是开发人员在向他们添加新文件时没有保存项目文件。VS2008 默认执行此操作,但我认为在 VS2010 中,除非您明确执行 File -> Save All,否则它们不会被保存。因此,这意味着更改没有被提交。一旦您的开发人员养成了在提交之前保存项目文件的习惯,那么 SVN 将在 99% 的时间内为您处理所有合并。剩下的 1% 的时间是某人对项目文件进行了一些更重大的重组,或者两个人对构建设置进行了相互冲突的更改。在这些情况下,您必须手动解决它们。

SVN 永远不会用另一个人覆盖一个人的更改,它总是会尝试合并。因此,如果您遇到此问题,则表明一个人正在以某种方式回滚其他人的更改,或者他们在 Visual Studio 中没有设置在外部更改时重新加载文件的选项:Tools -> Options -> Documents -> Detect when file is changed outside the environment.

处理这个问题的一个有效方法是设置一个简单的构建服务器,例如使用Jenkins,它会在一些签入后定期启动构建。如果构建失败,那么签入的人会收到一封邮件,告诉他们他们破坏了构建。您还可以拥有一个显示构建状态的监视器,这使得整个团队更容易看到损坏的构建,并希望鼓励每个人保持构建的修复。

于 2012-05-14T21:56:07.543 回答
1

CMake非常适合这一点。

如果您还没有遇到过 CMake,它允许您在 svn 之外的源文件的单独目录中创建整个项目的构建文件。

存储库根目录中的单个 CMakeLists.txt 文件将替换所有当前的 .vcxproj 和 .filters 文件。

于 2012-05-14T20:59:15.533 回答