改行コードが違うのが原因
バージョン
$ 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
9. patchの適用に失敗する
```
error: patch failed:
- 悲しい気持ちになる
解決法1:dos2unixコマンドを使う
解決法1は、commit後に「git log -p -2」すると、
ファイルの全行が更新されたことになってしまう。
そのかわし、一度やれば、以降は
該当ファイルは普通にhub amできるようになる。
-
更新したいファイルの改行コードを変更する
$ dos2unix <ファイルパス>
2. patchを手動適用
```
$ patch -p1 < .git/rebase-apply/patch
-
rejファイルがないことを確認
$ find . -name "*.rej" | wc -l
4. 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
2. 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ファイルをローカルに保存
2. Git BASHを起動し、プロジェクトに移動
```
$ cd プロジェクトパス
$ git checkout <リリース用ブランチ>
-
git amを実行
$ git am patchファイル置き場/1.patch
4. 失敗するので、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 <リリース用ブランチ>