質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
SourceTree

SourceTreeは、Gitのクライアントツール。視覚的に操作するGUI形式でGitの操作が容易になります。MacやWindowsなどのOSに依存しておらず、PC環境に合わせてインストールすることが可能です。

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

Q&A

解決済

4回答

2412閲覧

[SourceTree]Git hooksの改行コードについて

fukkun0412

総合スコア37

SourceTree

SourceTreeは、Gitのクライアントツール。視覚的に操作するGUI形式でGitの操作が容易になります。MacやWindowsなどのOSに依存しておらず、PC環境に合わせてインストールすることが可能です。

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

0グッド

0クリップ

投稿2019/01/22 03:44

編集2019/01/22 08:51

######質問内容
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も正常に動作させるにはどのようにすればよいのか。

是非、ご教授の程よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

自己解決

この質問に回答してくださった皆様、ありがとうございます。

この質問につきましては、シェルからバッチを呼ぶ形でフックスクリプトを呼ぶと正常に動作しないことを確認いたしましたので、シェルスクリプトでサーバ接続する方法に切り替えます。

ご教授してくださった皆様、本当にありがとうございました。

投稿2019/02/01 10:29

fukkun0412

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんにちは。

gitの改行コード自動変換をオフにしたうえで
改行コードをCR LFLFに統一するとうまくいくと思います。

windows環境の git で改行コードの自動変換に注意 - Qiita

なお改行コードは下の二種類と思ってもらっていいです(古いMacのみCR : \r)。

Win CR+LF : \r\n
Unix/Mac LF : \n

投稿2019/01/22 05:13

firedfly

総合スコア1131

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fukkun0412

2019/01/22 06:02 編集

gitの改行コード自動変換は最初からオフになっていました。 質問にあったリソースを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' 更新対象のリソース(上記で言う".xml"のもの:改行コードはWindows(CR LF))の改行コードも関係があるのでしょうか?
firedfly

2019/01/22 08:51 編集

「./upload.sh」の37行目にある「'\r'」はコマンドではない、 というエラーメッセージで、xmlファイルは関係ないです。 upload.shは本当にLFになってるんでしょうか……?
fukkun0412

2019/01/22 08:54

NotePad++の置換を使用して、LFにしています。改行コードを表示する箇所はLFと表示になっており、NotePad++の機能で改行コード表示すると、LFと表示されているので、LFになっていると思われるのですが、実際はそのほかに何か対応しないといけないのでしょうか?
fu7mu4

2019/01/28 14:39

バイナリエディタで確認してはいかがでしょうか?
fukkun0412

2019/01/29 03:37

fu7mu4さん、ご回答ありがとうございます。 バイナリエディタで確認しましたところ、改行がすべてLF(0A)に なっておりました。 それでも、上記のエラー($'\r': command not found)が発生しています。 hookスクリプト自体は問題ないことが分かりました。hookスクリプトから呼び出される、upload.shとupload.batの改行コードに関する事案とわかりましたが、なぜそうなってしまうのかわかりません・・・。
guest

0

pre-push.sh の 8行目でエラーがでているということは、$iまたは./upload.shがおかしいということになります。この$iがおかしい可能性があります。確認してください。

bash

1if [ $? -eq 0 ]; then 2 MSG=$(git log -1 --name-only --pretty=format:"%h" | grep strings | grep .xml) 3 cd $(cd $(dirname $0) && pwd) 4 for i in ${MSG[@]};do 5 echo "Update" 6 echo $i 7 ./upload.sh $i 8 done 9fi

投稿2019/01/29 15:05

fu7mu4

総合スコア1088

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fukkun0412

2019/01/30 06:33 編集

fu7mu4さんご回答ありがとうございます。 この回答に関しましての返答は以下の物になります。 ・$iには正常にファイルパスが格納されている。  →そのため、$iがおかしいというわけではない ・./upload.shがおかしいと表示されるのはupload.sh内で呼び出しているupload.batの動作に不備があり、./upload.shがおかしいと表示される  →upload.shの処理自体は問題なく動作はしている。(batの呼び出し含め)  →batの問題に関しては別の質問として掲載を予定。 以上になります。
guest

0

エラーメッセージにそのまま書いてあるじゃないですか

$'\r': command not found

\rなんてコマンドは知りませんって。
「改行コードがLFの場合」にコレが出てるってことは、carriage returnがおかしな変換されているんじゃないですかね。
すべてのファイルで改行コードを統一して下さい。

投稿2019/01/22 04:06

kunai

総合スコア5405

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fukkun0412

2019/01/22 05:41 編集

該当するリソースの改行コードを統一しましたが、同じくpushがうまくできませんでした。 更新対象のリソース(上記で言う".xml"のもの:改行コードはWindows(CR LF))の改行コードも関係があるのでしょうか?
kunai

2019/01/22 05:44

うまくいかないとはどういう状況か教えて下さい。
fukkun0412

2019/01/22 06:03 編集

上記に記載されているエラー内容 ./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は正常に動作しているのですが、SourceTreeのpushがうまくいきません。
kunai

2019/01/22 06:15

LFに正しく変換されていれば、そもそも\rが登場してこないと思うんですよ。 LFに統一した、と言うのは、どういう作業でLFにされているんでしょうか。 また、pre-push.shからuploadが呼ばれているんだと思いますが、pre-push側のコードを開示出来ませんか。
fukkun0412

2019/01/22 09:22

pre-pushのコードを記載しました。 LFへの変換に関しては、NotePad++の置換を使用しています。改行コードを表示する箇所はLFと表示になっており、NotePad++の機能で改行コード表示すると、LFと表示されているので、LFになっていると思われるのですが、実際はそのほかに何か対応しないといけないのでしょうか?
fu7mu4

2019/01/29 14:58

.xmlもLFにしてください。
fukkun0412

2019/01/30 03:51

fu7mu4さん .xmlの改行コードをLFにしてみましたが、変わらずpushができませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問