2011-07-14 19 views
1

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

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

dir1dir2間のすべての変更が正しく適用され、新規ファイルの行末文字がCR+LFをデフォルトされることを除いて、dir2内のファイルは終了とLF使用した場合でもラインマーカー。また、それらの間の違いが単なる行末の変更であるファイルは、どのような方法でもパッチされません - diffは変更を見ていないようです。

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

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

パッチに含まれている新しいファイルや変更されたファイルを元のファイルから終了させる方法はありますか?

答えて

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.メッセージを送ってください)ので、.origファイルを作るのを防ぐために--no-backup-if-mismatchを含める必要がありました。 -uはオプションであると思われます。これは、パッチが自分のパッチの種類を把握するためです。

関連する問題