1

まず、私がしていることを説明しましょう。5,000個のデータ定義言語ファイルを格納するCVSリポジトリがあります。これらの5,000個のファイルは、外部データモデリングアプリケーションから生成され、テキストであり、ウィンドウCRLFがあります。開発中に変更が必要な場合は、5,000個のファイルを再生成してから、EclipseのローカルCVSワークスペースの内容を上書きします。完全な上書き/置換は、ファイルの更新を見逃さないようにすることです。ファイルを上書き/置換した後、Eclipseを使用してチームを実行します<リポジトリと同期します。これを行うと、比較でCRLFを無視していないように見えるため、比較ではすべてのファイルに送信変更のフラグが立てられます。「空白を無視する」をオフにしましたが、日食のドキュメントには、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.

テキスト比較でファイルを開くと、差分は表示されませんが、ファイルの1つの上部に余分なCRLFがあります。これはバグですか、それともEclipseに欠けているオプションがありますか?問題は、独自の回線上にあるCRLFを無視しないことのようです。

4

1 に答える 1

2

Eclipseの比較ダイアログにはバグがありません。いくつかの独立した問題の出力が表示されているため、混乱しているだけです。

  1. 「空白を無視する」オプションは、比較ダイアログに表示される変更の量を減らすだけです。CVSが見ている違いには何の影響もありません。ファイルの行末が間違っている限り、CVSは文句を言います。

    一部のバージョン管理システムでは、この問題を解決するためにコンバーターを指定できますが、CVSではできません。したがって、実際には正しい行末のファイルを生成する必要があります。

  2. 「追加のCRLFを含む単一ファイル」には、実際には追加のCRLFがあります。理由を見つけて修正し、違いをなくしてください。

  3. ファイルを生成するときは、PrintStreamまたはを使用しないでくださいPrintWriter。魅力的ですが、これら2つには多くのバグがあり( APIコントラクトに違反してclose()いないflush()など)、プラットフォームに依存する行末を使用しますが、これはほとんどの場合、必要なものではありません。はい、それは偶然に機能するかもしれませんが、これについて私を信じてください、それはあなたが望むものではありません。事故で給料をもらってほしくないですよね?

    PrintStreamnorを使用しない場合は、同じ理由でPrintWriterSystemプロパティを使用しないでください。line.separator

    PrintStream/のメソッドの多くを含むがPrintWriter、バグを含まないヘルパークラスを作成することをお勧めします。さらに、行区切り文字を必要なものに設定できるようにする必要があります。

注:を使用する場合はWriter、charset / encodingも指定するようにしてください。指定しないと、「UTF-8からbytes」への変換が行末と同じくらいランダムになります。

于 2012-10-16T15:40:49.857 に答える