ディレクトリ構造は次のとおりです。
orig/l1/l2/file2patch
orig/l1-2/file2patch
そして
new/l1/l2/file2patch
new/l1-2/file2patch
これらのファイル間の正確な違いを見つけて1つのファイルとして保存してみましたが、適用が簡単ではないことがわかりました。
patch -d orig/ < patch.diff
私はこれを試しましたが、-d
パッチするファイルがすぐに存在する必要があると予想しました。orig
ディレクトリでパッチを再生成し、パッチ内の指定されたファイルにパッチを適用する方法はありますか?
答え1
指定されたパス名が正しくないように見えます(特にnew
他の人が変更したツリー)、patch
このオプションを使用して、出力で与えられたディレクトリレベルの数を無視するようにプログラムに指示できることを覚えておくことができます。diff
-p
パッチファイルに表示されているディレクトリとは異なるディレクトリにあるファイルにパッチを適用するときは、そのディレクトリに移動しcd
(一致しない部分をキャンセルするために)、この-p
オプションを使用しますcd
。
以下は、問題を解決した方法を示す短いスクリプトです(簡単なリストのためにGNUパッチのテスト実行オプションを使用)。
#!/bin/sh
cd /tmp/foo
OUT=/tmp/patch.diff
rm -f $OUT
diff -u orig/l1/l2/file2patch new/l1/l2/file2patch >>$OUT
diff -u orig/l1-2/file2patch new/l1-2/file2patch >>$OUT
diffstat -p1 $OUT
cd orig
patch -p1 --dry-run <$OUT
入力する:
$ find . -type f
./new/l1/l2/file2patch
./new/l1-2/file2patch
./orig/l1/l2/file2patch
./orig/l1-2/file2patch
出力:
$ /tmp/xx
l1-2/file2patch | 19 +++++++++++++------
l1/l2/file2patch | 5 ++---
2 files changed, 15 insertions(+), 9 deletions(-)
/tmp/foo/orig
patching file l1/l2/file2patch
patching file l1-2/file2patch
追加資料:
diff
-2つのファイルの比較(POSIX)patch
-ファイルへの変更の適用(POSIX)diffstat
-差分出力からヒストグラムを作成する