"patch -R"について
パッチを適用しようとしたら、いろいろ吐いてよくわからないので、調べた。
patch -c < "パッチ名"
で適用する。
元に戻すときは
patch -c -R < "パッチ名"
でOK。
ログはともに
patching file test.txt
と出る。
問題は、ぐちゃぐちゃになったとき。
1)パッチしたあとに、同じパッチをもう一度あてようとしたとき
- -
$ patch < testdiff.txt
patching file test.txt
=>一回あてる
$ patch < testdiff.txt
patching file test.txt
Reversed (or previously applied) patch detected! Assume -R? [n] n
=>もう一回あてようとすると、「リバースパッチだよ、-Rとみなしますか?」「いいえ」
Apply anyway? [n] n
=>「とにかく適用しますか」「いいえ」
Skipping patch.
1 out of 1 hunk ignored -- saving rejects to file test.txt.rej
=>「パッチを飛ばして、rejファイルを吐きます」
- -
- -
$ patch < testdiff.txt
patching file test.txt
Reversed (or previously applied) patch detected! Assume -R? [n] y
=>「リバースパッチとみなしますか」「はい」
- Rをつけた、つまり、元に戻すパッチとして取り扱う。
当然、もともとのパッチを適用していないファイルに戻される。
- -
- -
$ patch < testdiff.txt
patching file test.txt
Reversed (or previously applied) patch detected! Assume -R? [n] n
=>「リバースパッチとみなしますか?」「いいえ」
Apply anyway? [n] y
=>「とにかくあてますか?」「はい」
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file test.txt.rej
=>あてられませんでしたので、Hunkとしてrejを吐きます。
- -
2)パッチしていないファイルに-Rとしてパッチをあてたとき
- -
$ patch -R < testdiff.txt
patching file test.txt
Unreversed patch detected! Ignore -R? [n] y
=>「unreversedパッチがありますが、-Rを無視しますか」「はい」
=>パッチ適用した通常の処理となる
- -
3) まとめ
パッチ後に同じパッチをあてると、元に戻すリバースとみなすか聞いてくる。
はい - リバースとして扱う
いいえ - 「とにかくあてる」を選ぶと、あてられないのでrejを吐く。
いいえ - 「あてない」を選ぶと、これまたあてられないのでrejを吐く。
(1) -------
test.txt
aaa
bbb
ccc
ddd
(2) -------
test2.txt
aaa
bbb
ccc
(3) -------
testdiff.txt
test.txt 2010-01-12 17:38:21.000000000 +0900
-
-
- test2.txt 2010-01-12 17:38:50.000000000 +0900
-
**************
1,5 ****
aaa
- bbb
ccc
ddd
-
-
- 1,4 ----
-