我们的Delphi 7开发团队以文本模式存储表单文件(dfm),并使用源控制系统(Subversion)来跟踪更改。
有时,我们注意到表单文件在修订版之间返回二进制格式,导致像TortoiseMerge这样的差异工具抱怨。
使用Subversion更改日志,我可以看到DFM文件之前以文本形式存储。软件开发人员永远不会手动将存储文件格式更改回二进制文件。
你遇到过同样的情况吗?这是一个众所周知的问题吗?答案 0 :(得分:11)
这在Delphi 7中确实发生,但在以后的版本中已修复。通常,您可以通过打开.pas文件然后切换到表单视图来访问IDE中的表单。右键单击您的表单,如果您之前已经完成此操作,则会显示它是“文本DFM”。
在Delphi 7 IDE中直接打开.dfm文件时,您将遇到文本DFM切换到二进制DFM的问题。例如。 File-> Open-> Somefile.dfm ..右键单击dfm并选择“View as Form”。现在右键单击表单,您将看到“Text DFM”未被取消。
当我们打开一个grep搜索结果的DFM时,我们遇到了问题。它也使我们感到困惑,并且会因为文本被检查而导致cvs中的dfm损坏。
答案 1 :(得分:4)
我已经看到它发生在Delphi 7中,当一个表单继承自另一个项目的另一个表单时,它自己在Delphi中打开而没有它所属的项目。
答案 2 :(得分:4)
当IDE混淆时,有时会发生这种情况。
它通常在您在Delphi 7 IDE中发生访问冲突后开始。
有时,IDE中的一个或多个Delphi编辑器缓冲区变为只读(而磁盘上的文件仍然是可读/写的)。
行为发生的次数远少于Delphi 5或6,但有时它确实发生在Delphi 7中。
您可以做的最好的事情就是在您获得访问冲突时立即重启Delphi 7 IDE。
答案 3 :(得分:2)
如果有人用不同版本的Delphi打开了项目(或更改了默认设置),他可能会以不同的格式保存表单。
答案 4 :(得分:1)
我们当然遇到了这个。我们专门使用D7。
从来没有达到它的底部,因为它一年只发生了六次左右,尽管它很麻烦但很容易得到补救。
我有兴趣看到Lars的回答,并且肯定会看下次这是否可能导致这种情况发生。
答案 5 :(得分:1)
您可能有兴趣调查使用Beyond Compare而不是TortoiseSVN的内置合并工具。 Beyond Compare是用Delphi编写的,本身就知道如何读取二进制DFM。这意味着,您的DFM是以二进制还是文本存储在Subversion中的问题(甚至没有问题)。超越比较V3还进行3向合并,这使得合并多个提交非常容易。即使忽略了差分二进制DFM的能力,它仍然是比TortoiseSVN的内置工具更好的差异查看器。我强烈推荐它,它非常便宜(我与Scooter软件无关,除了是一个非常满意的客户)。
答案 6 :(得分:1)
我们也经常遇到这个问题,它似乎与查看DFM的来源(Alt-F12)然后进行Visual Source Safe操作(例如办理登机手续)有关。