なぜならば patch
コマンドにとって リネーム(rename) 情報は garbage = ゴミ
に相当し
差分適用の対象外だから。
リネーム情報しか載せていないパッチ、というのは以下のようなパッチだ。
diff --git a/appAdmin/moduleX/logic.txt b/appAdmin/moduleX/renamedLogic.txt
similarity index 100%
rename from appAdmin/moduleX/logic.txt
rename to appAdmin/moduleX/renamedLogic.txt
ここから下は備忘的なものになるので、有益なるのは man patch
や Man page of PATCH になるかもしれない。
備忘録
環境
- MacOSX - 10.12.5
- git - 2.11.0
- patch - 2.5.8
以下のようなプロジェクトがあるとする。
project
|
|── patchDir ── 001_rename.patch
|── .git
|
├── appAdmin
│ └── moduleX
│ └── logic.txt
└── appCustomer
└── moduleX
└── logic.txt
2 つの logic.txt
のファイル内容は全く同一とする。
操作
今、 appAdmin/moduleX/logic.txt
> appAdmin/moduleX/renamedLogic.txt
へ
リネーム、コミットした。
project
|
|── patchDir ── 001_rename.patch
|── .git
|
├── appAdmin
│ └── moduleX
│ └── renamedLogic.txt
└── appCustomer
└── moduleX
└── logic.txt
git diff
より直前コミットとの差分からパッチファイルを作成した。
diff --git a/appAdmin/moduleX/logic.txt b/appAdmin/moduleX/renamedLogic.txt
similarity index 100%
rename from appAdmin/moduleX/logic.txt
rename to appAdmin/moduleX/renamedLogic.txt
あることを考えた
上記のパッチファイルを書き換えて、
appCustomer/moduleX/logic.txt
> appCustomer/moduleX/renamedLogic.txt
にできるかどうか。つまり
diff --git a/appAdmin/moduleX/logic.txt b/appAdmin/moduleX/renamedLogic.txt
similarity index 100%
rename from appAdmin/moduleX/logic.txt
rename to appAdmin/moduleX/renamedLogic.txt
↓
diff --git a/appCustomer/moduleX/logic.txt b/appCustomer/moduleX/renamedLogic.txt
similarity index 100%
rename from appCustomer/moduleX/logic.txt << ココを appAdmin > appCustomer へ
rename to appCustomer/moduleX/renamedLogic.txt << 同上
へ書き換えた後 patch -p1 < patchDir/001_rename.patch
したら
appCustomer/moduleX/logic.txt
> appCustomer/moduleX/renamedLogic.txt
になってくれるか。
検討結果
できないようで。
実際に
$ patch -p1 < patchDir/001_rename.patch
patch: **** Only garbage was found in the patch input.
こんなエラーが出る。patch
にて garbage
しか見つからんと。せんかたない。
man patch
からするに、パッチ内 rename
の情報は garbage = ゴミ
なので、差分適用の対象外になる(patch
がパッチ適用してくれる対象から外れる)と。
蛇足
git apply(or am)
でどうにかリネームのみのパッチ適用ができるらしい。記事が膨れるのでまた。