2009-10-13 66 views
3

几天前,我收到一封电子邮件,内容是某人在构建我在Google Code上的Delphi项目时遇到的问题。项目文件和其中一个DFM文件在更新了我检查过的一些更改之后被彻底清除了。我们反复讨论了一下,并将其追溯到他所说的SVN投入额外的东西。他删除了这些文件并再次运行了更新,它工作正常。什么能导致SVN更新不正确地合并?

我以前从来没有看到这个问题,我是不是能复制或在我的最终验证它的任何。没有与其他用户发生任何更新冲突,因为我是唯一具有对存储库的写入访问权限的冲突。所以我想知道可能会造成这种情况。这是SVN的一个已知问题吗?有没有办法阻止它发生?

回答

5

如果DFM文件被颠覆视为文本,假设用户有局部的变化,它会尝试合并。如果存在冲突且Subversion无法解决它们,它将添加额外的细节来帮助您手动解决冲突,您将看到像<<<<<<< .mine这样的文本,这当然会在Delphi中出现。也可能是Subversion自动进行合并,这并没有冲突,但导致了一个损坏的DFM文件。

你之所以没有看到这个问题可能是因为你没有本地更改,所以没有合并是必要的。删除或还原文件会将工作副本重置为BASE,因此任何更新都不需要进行合并。

一个解决办法:如果你有这应该被Subversion合并文本文件,然后将svn:mime-type到适当的非文本值,它将把它作为二进制,并且不会尝试合并。您将被要求手动解决问题。顺便说一句,如果你需要在Subversion中存储敏感文本文件,并且不希望差异显示内容,这也是一个不错的提示。

+0

有趣的把戏。但之后我会失去使用TortoiseSVN在检查新批代码之前检查我的更改的能力。 – 2009-10-13 04:13:36

+0

如果合并,那么很容易破坏DFM文件,更改“不重要”的细节可能会导致组件顺序发生更改。天真的合并可以完全消除它。 – 2009-10-13 04:27:46

+0

@Mason - 你试过了吗? TortoiseSVN - > Diff会显示更改(它对我来说确实如此,但我已将它配置为使用Beyond Compare)SVN不会显示差异(例如在提交后的电子邮件中),而是会报告“二进制文件不同” 。我用Delphi编码已经有好几年了,但我猜它与.NET设计器文件类似。就个人而言,我不打扰为这类文件设置MIME类型(我只是提出了一种可能的解决方案),因为如果在更新到自动生成和维护的文件后看到“合并”状态,这是一个非常大的线索可能会出错:) – si618 2009-10-13 05:49:19

3

假设他或他的本地系统设法破坏这两个文件。

然后假设他更新并发现事情不起作用。经过一些指责之后,他用ahem,本地mods删除了这些文件,运行了更新,并且gee ...正确的文件!

Entia non sunt multiplicanda praeter necessitatem

虽然它始终是可能的一个奇怪的语法错误是一个编译器错误和损坏的文件是一个svn的错误,通常有较为平淡的原因,我们有它William of Ockham's权威的更简单的解释通常是正确的。

+0

好点。除了项目文件和DFM(表单描述)文件由IDE管理。它们以文本格式存储,但您通常不会像正常的源代码那样手工编辑它们。我从来没有听说过IDE会损坏DFM文件,并且损坏的项目文件确实偶尔会发生,但不是经常发生。所以我觉得这个解释不太可能。 – 2009-10-13 00:26:00

+0

我完全同意你的意见,但现在我们必须考虑到*发表偏倚*,又名*报告偏倚*。当然,这不太可能,但同样的解释也是如此。我们正在比较不太可能发生的情况与其他不太可能发生的情况,并且鉴于只会报告腐败现象,腐败很少的事实可能是一个危险的因素。 – DigitalRoss 2009-10-13 00:38:09

+1

我同意他最有可能在本地消磨它。 “由svn添加的额外东西”很可能是svn在识别本地冲突时将添加到工作副本中版本化文件的冲突信息。解决冲突会使“额外的东西”消失。或者实际上,简单地删除它们并再次尝试。 ;-) – 2009-10-13 00:40:55

1

“munged”文件是否包含“我的”或“他们的”文本?

如果是的话,他可能打乱了他的解决冲突,并最终提交了他们的还是我无意中修订版。

或者它完全有可能认为它可以自动合并更改,因为它们位于文件的“不相关”部分,但对于SVN(或任何天真的自动合并过程)“不相关”仅仅意味着没有/没有重叠的文件。

“天真”自动合并一无所知的任何结构内部的文件,这样可以很容易地合并,它认为是无关的时候,其实是改变对对方不利的副作用的变化。不知道正是性质的“改写(munging)”很难肯定地说,虽然在这种情况下,提及“额外的东西”,这表明“地雷”或“他们”的修订无意提审似乎最有可能。

0

哪个Delphi版本?较老的Delphi版本有错误,其中有时文本DFM文件变成二进制文件。

文件突然变成二进制杀死任何源代码管理系统。

- jeroen

+0

2010,所以这不是一个问题。 – 2009-10-13 15:56:20

+0

它仍然可以是:如果SVN不支持unicode正确(或SVN客户端之一不),那么你会遇到麻烦 – 2009-10-13 16:24:38

0

您是否在多个平台上工作?你是否正在使用假设Unix lineendings的编辑器(如一些cygwin工具?)

如果是,请检查您是否正确配置了eol样式属性。

0

我是执行SVN更新和SVN被打乱了DFM文件与< < < < < < < < .mine,这是我从来没有见过的。我必须在Delphi允许我打开项目之前手动删除这些修改。

相关问题