2012-04-01 127 views
2

我正在使用Hg来管理和合并与VS2008项目中涉及的其他三个开发人员的代码。我们确实有一个.hgignore文件,它忽略了不需要跟踪的相当数量的文件,例如* .pdb,* .obj等。但是,我们会跟踪.csproj文件。Mercurial搞砸了csproj文件?

定期地看起来合并后文件会丢失。我们会得到构建问题,并且必须重新定位项目文件夹中的文件,但不要放在csproj文件中。

最后,我在合并冲突期间注意到有时汞似乎不正确地合并。下面是一个截图。文件中需要手动干预的实际冲突较低。但在本节中,hg错误地用一个名为ReportTasks.cs的新文件替换DirectoryTasks.cs,实际上,两者都应该被添加。人们如何设法避免这种情况?

enter image description here

+0

我在ReportTasks.cs行附近的左栏中看到了'B'字样,您在那里选择了'B'(或者它是否以相同的方式标记自动决策?!)。而不是选择'A'和'B' – zerkms 2012-04-01 23:25:23

+0

不,在我做任何事情之前,hg选择了B.实际的冲突是在文件的其他地方,等待我的决议。 IOW,我没有在此合并位置选择B,它以某种方式“预先选择”,并导致错误的构建... – alphadogg 2012-04-01 23:27:52

+0

为了更清楚起见,屏幕截图是我在开始合并解决方案时看到的一些东西已经为我合并。我还没有对这个文件采取行动。 – alphadogg 2012-04-01 23:29:16

回答

0

那么,被示出在图像是指:

  1. DirectoryTasks.cs线原本
  2. 然后显影剂1手动或使用一些VS GUI(在parent1修改)它改变到ReportTasks.cs
  3. 开发者2没有改变它

因此,当您合并时 - 您会收到其他开发人员所做的更改。

的问题应该是:为什么VS或开发商parent1修订,ReportTasks更换DirectoryTasks(它是不相关的HG在所有)

+0

文件没有变化。 Dev 1 ADDED ReportTasks.cs。 DirectoryTasks.cs一直在那里。 (事实上​​,你可以在Base列中看到它。)出于某种原因,文本比较似乎认为它们是同一行? – alphadogg 2012-04-01 23:30:26

+0

@alphadogg:不,我看到开发人员1添加了接口并**替换了** cs-file。和hg看到的一样我 – zerkms 2012-04-01 23:31:25

+0

@alphadogg:如果更新到'parent1'并尝试在项目文件中找到'DirectoryTasks.cs'会怎么样?它是什么? – zerkms 2012-04-01 23:35:05

0

我支持zerkms:这是开发者的手中错,不是HG

父母的作者1 替换一个字符串DirectoryTasksReportTasks添加另一个ReportTasks字符串。在这种情况下,您必须与开发人员一起工作

强制执行.csproj文件是为了在全新的工作环境中获得正常运行的项目,还是每个IDE为自己的需要重新创建的本地IDE工件?

+0

它是强制性的(它相当于一个makefile),但是它使用IDE进行管理,而不是作为文本文件进行管理。如果开发人员编辑项目并更新源代码管理中的工作副本而不保存项目,则可能会出错。然后您可以选择使用内存中的副本或磁盘上的副本。这些选项都不好,因为它们都失去了改变。修改项目后尽快保存项目(尽管没有“保存项目”按钮,因此您必须使用“全部保存”),这是很好的做法。 – 2012-04-02 08:35:20