1

diff を使用してパッチを作成しようとしていますが、新しいファイルを作成するときにファイルで使用されている行末文字を使用したり、ファイルが変更されたときに行末を変更したりするパッチを取得できません。基本的に、私はやっています:

cp -r dir1 dir3
diff -ruN dir1 dir2 > dir3\patch.txt
cd dir3
patch -p1 < patch.txt

dir1との間のすべての変更は適切に適用されますが、ファイルが行末マーカーとして使用されている場合でも、dir2新しいファイルの行末文字がデフォルトで に設定されます。また、それらの違いが行末の変更だけであるファイルは、まったくパッチされていません-diffは変更を認識していないようです。CR+LFdir2LF

したがって、実行diff -rq dir2 dir3すると大量の が得られますがFiles aaa and bbb differ、正常にdiff -rwq dir2 dir3動作します。

Windows XP でdiff - GNU diffutils version 2.7andpatch 2.5を使用しています。UnxUtils

パッチに含まれる新しいファイルと変更されたファイルの行末を元のファイルのままにする方法はありますか?

4

1 に答える 1

1

これは機能します:

cp -r dir1 dir3
diff --binary -ruN dir1 dir2 > dir3\patch.txt
cd dir3
patch --no-backup-if-mismatch --binary -u -p1 < patch.txt

フラグを使用しない--binaryということは、EOL を無視して、ファイルが行ごとに解析されることを意味します。何らかの理由で、常にきれいにパッチが適用されるとは限らない (メッセージが表示される) ため、ファイルを作成しないようHunk #1 succeeded at 1 with fuzz 1.に含める必要がありました。patch はそれ自体でパッチの種類を判断するため、オプションのようです。--no-backup-if-mismatch.orig-u

于 2011-09-13T21:36:51.217 に答える