改行コードが違うのが原因
バージョン
$ hub --version
git version 2.4.5
hub version 2.2.1
経緯
- GitHubにRepository作る
- Windows(=改行コード「CR+LF」)でファイルを作って、GitHubにpushしてる
- ↑↓開発チームが移管
- 改修を行い、pull requestを作る
- GitHubのWebページで「Merge pull request」する(ここまでは成功する)
- リリースが決定する
-
Macで、リリース用ブランチにてhub amする
$ hub am <pull requst>
-
patchの適用に失敗する
error: patch failed:
悲しい気持ちになる
解決法1:dos2unixコマンドを使う
解決法1は、commit後に「git log -p -2」すると、
ファイルの全行が更新されたことになってしまう。
そのかわし、一度やれば、以降は
該当ファイルは普通にhub amできるようになる。
-
更新したいファイルの改行コードを変更する
$ dos2unix <ファイルパス>
-
patchを手動適用
$ patch -p1 < .git/rebase-apply/patch
-
rejファイルがないことを確認
$ find . -name "*\.rej" | wc -l
-
patchの適用に成功したら、git add & git am & git push
$ find . -name "*\.orig" | xargs rm $ git add . $ git am --continue $ git push origin <リリース用ブランチ>
最初の「find . -name "*¥.orig" | xargs rm」は、
patchファイルに空白のみの行があった時などに
origファイルが作成されてしまうため、削除しておく。
※本当は、出ないようにpull requestを作成するのが正解
解決法2:patchコマンドに--binaryオプションをつける(未検証)
解決法2は、更新したい箇所だけを更新できるから、
リリース用ブランチのチェックは正確にできそう。
-
patchを手動適用
patch --binary -p1 < .git/rebase-apply/patch
-
patchの適用に成功したら、git add & git am & git push
$ git add <更新したファイル> $ git am --continue $ git push origin <リリース用ブランチ>
解決法3:Windowsでマージする
※前準備
git for windowsをインストール
https://git-for-windows.github.io/
-
ブラウザで以下のURLにアクセスし、patchファイルをローカルに保存
http://github.com/・・・/・・・/pull/1.patch
-
Git BASHを起動し、プロジェクトに移動
$ cd プロジェクトパス $ git checkout <リリース用ブランチ>
-
git amを実行
$ git am patchファイル置き場/1.patch
-
失敗するので、patchを手動適用
patch --binary -p1 < .git/rebase-apply/patch
patchの適用に成功したら、改行コードがLinux(LF)になってしまう為、エディター等を使い、改行コードを戻す
-
git add & git am & git push
$ git add <更新したファイル> $ git am --continue $ git push origin <リリース用ブランチ>