LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-06-25

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

バージョン

$ 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 <リリース用ブランチ>
    
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