Edited at

Windowsで作ったProjectをMacでhub amしたら失敗する話

More than 1 year has passed since last update.

改行コードが違うのが原因


バージョン

$ hub --version

git version 2.4.5
hub version 2.2.1


経緯


  1. GitHubにRepository作る

  2. Windows(=改行コード「CR+LF」)でファイルを作って、GitHubにpushしてる

  3. ↑↓開発チームが移管

  4. 改修を行い、pull requestを作る

  5. GitHubのWebページで「Merge pull request」する(ここまでは成功する)

  6. リリースが決定する


  7. Macで、リリース用ブランチにてhub amする

    $ hub am <pull requst>
    



  8. patchの適用に失敗する

    error: patch failed: 
    


  9. 悲しい気持ちになる



解決法1:dos2unixコマンドを使う

解決法1は、commit後に「git log -p -2」すると、

ファイルの全行が更新されたことになってしまう。

そのかわし、一度やれば、以降は

該当ファイルは普通にhub amできるようになる。



  1. 更新したいファイルの改行コードを変更する

    $ dos2unix <ファイルパス>
    



  2. patchを手動適用

    $ patch -p1 < .git/rebase-apply/patch
    



  3. 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は、更新したい箇所だけを更新できるから、

リリース用ブランチのチェックは正確にできそう。



  1. 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/



  1. ブラウザで以下のURLにアクセスし、patchファイルをローカルに保存

    http://github.com/・・・/・・・/pull/1.patch
    



  2. Git BASHを起動し、プロジェクトに移動

    $ cd プロジェクトパス
    
    $ git checkout <リリース用ブランチ>



  3. git amを実行

    $ git am patchファイル置き場/1.patch
    



  4. 失敗するので、patchを手動適用

    patch --binary -p1 < .git/rebase-apply/patch
    


  5. patchの適用に成功したら、改行コードがLinux(LF)になってしまう為、エディター等を使い、改行コードを戻す



  6. git add & git am & git push

    $ git add <更新したファイル>
    
    $ git am --continue
    $ git push origin <リリース用ブランチ>