LoginSignup
0
0

More than 5 years have passed since last update.

リネーム情報しか載せてないパッチ(コミット差分)を基に patch コマンドを適用しても、何もしてくれない。

Last updated at Posted at 2017-06-14

なぜならば patch コマンドにとって リネーム(rename) 情報は garbage = ゴミ に相当し

差分適用の対象外だから。

リネーム情報しか載せていないパッチ、というのは以下のようなパッチだ。

some.patch
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 patchMan 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 より直前コミットとの差分からパッチファイルを作成した。

patchDir/001_rename.patch
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

にできるかどうか。つまり

patchDir/001_rename.patch
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

patchDir/001_rename.patch
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) でどうにかリネームのみのパッチ適用ができるらしい。記事が膨れるのでまた。

関連記事

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0