Eclipse不会忽略团队同步中的CRLF

时间:2012-10-16 14:43:10

标签: eclipse synchronization repository cvs

首先,让我解释一下我在做什么。我有一个CVS存储库,我存储了5,000个数据定义语言文件。这5,000个文件是从外部数据建模应用程序生成的,它们是文本并具有Windows CRLF。在开发过程中,如果我需要进行更改,我会重新生成5,000个文件,然后在eclipse中覆盖我本地CVS工作区的内容。完全覆盖/替换是为了确保我不会错过任何文件更新。在覆盖/替换文件后,我使用eclipse做一个团队<与存储库同步。当我这样做时,比较将每个文件标记为传出更改,因为它看起来不会忽略其比较中的CRLF。我已经检查了“忽略空格”并且eclipse文档声明它应该忽略CRLF:

 Ignore whitespace option:
 Causes the comparison to ignore differences which are whitespace characters 
 (spaces, tabs, etc.). Also causes differences in line terminators ( LF 
 versus CRLF) to be ignored.

当我在文本比较中打开文件时,它没有显示差异,但在其中一个文件的顶部有一个额外的CRLF。这是一个错误还是我在eclipse中缺少一个选项?看起来问题是它不会忽略各自的CRLF。

1 个答案:

答案 0 :(得分:2)

Eclipse比较对话框没有错误;你只是感到困惑,因为你看到了几个独立问题的输出。

  1. “忽略空格”选项只会减少比较对话框显示的更改量;它对CVS看到的差异没有任何影响。因此,只要文件的行结尾错误,CVS就会抱怨。

    某些版本控制系统允许您指定转换器来解决此问题,而CVS则不允许。所以你真的需要生成具有正确行结尾的文件。

  2. “带有额外CRLF的单个文件”确实有一个额外的CRLF。找出原因并解决问题,以消除差异。

  3. 生成文件时,绝不能使用PrintStreamPrintWriter。这很诱人但是这两个有很多错误(比如close()没有flush(),违反了他们的API合约)加上他们使用平台相关的行结尾,这几乎不是你想要的。是的,这可能是偶然的,但相信我,这不是你想要的。你也不希望你在事故中支付支票,对吗?

    如果您不使用PrintStreamPrintWriter,请出于同样的原因避免使用系统属性line.separator

    我建议编写一个帮助器类,其中包含PrintStream / PrintWriter的许多方法,但没有任何错误。此外,它应该允许您将行分隔符设置为您需要的任何内容。

  4. 注意:如果您使用Writer,请确保您还指定了charset / encoding或“UTF-8 to bytes”转换将与行结尾一样随机。