質問: ###### 質問内容 SourceTreeのGit hooksの「pre-push」のフックスクリプトを用いて、".xml"のついたリソースをプッシュした時にサーバ側にもアップするように処理を書いているのですが、 以下のことがあり、今困っています。 ###### リソース pre-push:改行コードはUnix(LF) upload.sh:改行コードはWindows(CR LF) upload.bat:改行コードはWindows(CR LF) 上記のリソースはD:\Gitwork\hook_test\.git\hooks内にある。 OSはWindows10 Pro。 ・リソースのコード pre-push if [ $? -eq 0 ]; then MSG=$(git log -1 --name-only --pretty=format:"%h" | grep strings | grep .xml) cd $(cd $(dirname $0) && pwd) for i in ${MSG[@]};do echo "Update" echo $i `./upload.sh $i` done fi ###### 今起きている現象 upload.shとupload.batの改行コードが両方Windows(CR LF)・両方Unix(LF)の場合 →上記の二つのファイルは正常に起動するがpushができない。 エラー内容 ./upload.sh: line 37: $'\r': command not found .git/hooks/pre-push: line 8: english: command not found error: failed to push some refs to 'Z:\hook_test' upload.shとupload.batの改行コードが両方Macintosh(CR)の場合 →上記の二つのファイルは正常に起動しないがpushができる。 ###### 解決したいこと ・なぜ、upload.shとupload.batの改行コードがMacintosh(CR)でないと、pushができないのか。その理由・対処法。 ・リソースを正常に動作しかつ、pushも正常に動作させるにはどのようにすればよいのか。 是非、ご教授の程よろしくお願いいたします。
回答: pre-push.sh の 8行目でエラーがでているということは、$iまたは./upload.shがおかしいということになります。この$iがおかしい可能性があります。確認してください。 ``` if [ $? -eq 0 ]; then MSG=$(git log -1 --name-only --pretty=format:"%h" | grep strings | grep .xml) cd $(cd $(dirname $0) && pwd) for i in ${MSG[@]};do echo "Update" echo $i ./upload.sh $i done fi ```