【问题标题】:Mercurial Messing Up csproj Files? [closed]Mercurial 弄乱 csproj 文件? [关闭]
【发布时间】:2012-04-01 21:51:42
【问题描述】:

我正在使用 Hg 与参与 VS2008 项目的其他三个开发人员一起管理和合并代码。我们确实有一个 .hgignore 文件,它忽略了很多不需要跟踪的文件,例如 *.pdb、*.obj 等。但是,我们确实跟踪 .csproj 文件。

通常,合并后文件似乎会丢失。我们会遇到构建问题,并且必须重新定位项目文件夹中的文件,而不是 csproj 文件中的文件。

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

【问题讨论】:

  • 我在ReportTasks.cs 行附近的左栏中看到了字母B,您在那里选择了B(或者它是否以相同的方式标记自动决策?!)。而不是选择AB
  • 不,hg 在我做任何事情之前选择了 B。实际的冲突在文件中的其他地方,等待我的解决。 IOW,我没有在这个合并位置选择 B,它以某种方式被“预选”,会导致构建错误......
  • 为了更清楚,屏幕截图是我在开始合并分辨率时看到的,其中一些东西已经为我合并了。我尚未对此文件采取任何措施。
  • @alphadogg - 你能用窗口的相关部分和更大的比例替换屏幕截图吗?
  • 虽然已关闭,而且示例很糟糕,但 csproj 文件似乎有可能成为 CVS 中的问题。请参阅 discuss.joelonsoftware.com/default.asp?dotnet.12.288423.10 以获取旧的不同示例。 VS 似乎以某种方式添加了可能导致合并问题的 行。

标签: visual-studio-2008 mercurial merge


【解决方案1】:

那么,图片上显示的意思是:

  1. 原来有DirectoryTasks.cs
  2. 然后开发人员 1 手动或使用一些 VS GUI(在 parent1 修订版中)将其更改为 ReportTasks.cs
  3. Developer 2 没有改变它

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

问题应该是:为什么VS或开发者在parent1修订版中将DirectoryTasks替换为ReportTasks(而且与HG完全无关)

【讨论】:

  • 文件没有变化。开发 1 添加了 ReportTasks.cs。 DirectoryTasks.cs 始终存在。 (实际上,您在 Base 列中看到它。)出于某种原因,文本比较似乎认为它们是同一行?
  • @alphadogg:不,我看到开发人员 1 添加了接口并替换了 cs-file。 hg 和我看到的一样
  • @alphadogg:如果您更新到parent1 并尝试在项目文件中找到DirectoryTasks.cs 会怎样?这是什么线?
  • 看起来文件在那里,但 csproj 在某个分支中丢失了对它的引用。因此我的困惑。似乎合并本身是“正确的”,但在不正常的状态下工作。我会进一步研究。
  • @alphadogg:只是一个旁注:我一直在使用 VS2010 和 hg 并且没有遇到过这样的错误
【解决方案2】:

我会支持 zerkms:这是开发者的错,不是 hg

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

.csproj 文件是强制性的,以便在全新的工作场所获得正常运行的项目,还是它是本地 IDE 工件,每个 IDE 都根据自己的需要重新创建?

【讨论】:

  • 它是强制性的(它相当于一个 makefile),但它是使用 IDE 管理的,而不是作为文本文件。如果开发人员编辑项目并在源代码管理中更新工作副本而不保存项目,则可能会出错。然后,您可以选择使用内存中的副本或磁盘上的副本。这些选项都不好,因为它们都丢失了更改。确保在对项目进行更改后立即保存项目是一种很好的做法(尽管没有“保存项目”按钮,因此您必须使用“全部保存”)。
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
相关资源
最近更新 更多