イベントは次のとおりです。 2つのファイルがあります:file1.c
、file2.c
ls
file1.c file2.c patch.diff
patch < patch.diff
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej
(the same with file2.c)
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff
patch -R < patch.diff # I thought it will revert changes back
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej
(again, the same with file2.c)
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff
これで、破損したファイルが残っていますが、どのように修復できるかわかりません。 2番目のステップでは、* .origファイルがすでに破損している変更に置き換えられているようです。どんなアイデアがありますか?
答え1
常にソースファイルからバックアップコピーを作成することをお勧めします。
patch
callオプションを使用すると、自動的にこれを実行できます-b
。
背景:ファイルがない場合は、.rej
次を呼び出すことができます。
patch -R
パッチを反転します。ただし、問題が発生した場合は動作しません。
file2.c.orig
起動時にファイルがすでに存在する場合、patch
そのファイルは削除され、現在の状態のバックアップコピーに置き換えられます。
これらのファイルがある場合は、.orig
簡単に元のファイル名に名前を変更してパッチを元に戻すことができます。
単一のパッチが失敗した場合は、プロジェクト内のすべてのファイルのすべてのパッチをキャンセルするのが最善です。パッチが適用されたすべてのファイルのファイルが必要なので、.orig
以下を使用することをお勧めします。
patch -b
これらのファイルがある場合は、.orig
次のように電話できます。
for i in *.orig; do
base=`basename $i .orig`
mv $i $base
done