web-dev-qa-db-ja.com

キャリッジリターンを無視するパッチを取得するにはどうすればよいですか?

LinuxシステムでWindowsの行末のあるファイルにパッチを適用しようとしていますが、ファイルの改行が原因で競合が発生しています。

-lオプション(空白を無視)はEOL文字を無視しません。 ウィンドウスタイルの行末を無視するパッチを取得する方法はありますか?

24
James McMahon

マンページから--binaryオプションを使用してみてください(私の強調)

- バイナリ

標準出力と/ dev/ttyを除いて、すべてのファイルをバイナリモードで書き込みます。 読み取り時に、CRLF行末をLF行末に変換するためのヒューリスティックを無効にします。(POSIX準拠のシステムでは、読み取りと書き込みは行末を変換しません。Windowsでは、読み取りと書き込みはデフォルトで行末を変換します。行末が重要な場合は、diff --binaryによってパッチを生成する必要があります。)

私は上記を完全には理解していませんが、LinuxマシンでUnixパッチをDOSファイルに適用することは私にとってはうまくいきました。

10
Jon

ここにリンクがあります http://www.chemie.fu-berlin.de/chemnet/use/info/diff/diff_2.html

-w' and-- ignore-all-space 'オプションは、一方のファイルに空白があり、もう一方のファイルに空白がない場合でも、違いを無視します。空白文字には、タブ、改行、垂直タブ、>フォームフィード、キャリッジリターン、スペースが含まれます

次のように差分を実行します:diff -w file1.txt file2.txt

8

次のコマンドを使用してこれを回避し、対象のすべてのファイルをUNIXの行末に変換します。

dos2unix `cat mixed-line-ending.patch | grep Index\: | sed -e 's/Index\://'`
dos2unix mixed-line-ending.patch
patch -p0 < mixed-line-ending.patch
2
CPrescott

git diffコンソール出力から手動でコピーしてLFを含むパッチファイルに貼り付けた差分でこの問題が発生しました。そのパッチファイルを再び機能させるには(CRとLFを使用していた実際のファイルに適用できるようにするため)、いくつかのことを手動で行う必要がありました。

  • 「^ M」のすべてのインスタンスを見つけてドロップします
  • ハンク内のすべての行にCRを追加しますが、メタ形式の行には追加しません(@@など)
  • 空だったハンク内のすべての行で、最初の列に欠落しているスペースを追加します

joe構文の強調表示は、ハンクを修正するとすぐに適切に色付けされるため、非常に役立ちました。

1
Josip Rodin