ローカルや、自前・クラウド環境で自らgitサーバを構築するなどしたときに、
リモートリポジトリを作成するかと思います。
その際、自動でデプロイするようにhooks内でスクリプトを記述します。
ベアリポジトリのフック内でpost-receiveを追加する方法は
多くのサイトで紹介されています。
その通りに行った後、ローカルからpushしたときに
post-receiveで下記のようなエラーが表示されました。
remote: error: cannot run hooks/post-receive: No such file or directory
まるで、ファイルが見つからないような内容です。
意外と沼にハマったので備忘録として残します。
同様のエラーで進まない方は、ぜひご参考に。
現状の構成
まず、リモートリポジトリについてです。
私は、LinuxベースのOSです。
ベアリポジトリ
/volume1/git/AAA.git
にベアリポジトリを作成しました。
hooksにpost-receive.sampleが存在しなかったため、
手動で作成しました。
#!/bin/sh cd /volume1/web/AAA git --git-dir=.git pull
なお、スクリプト内の2行目は、ノンベアリポジトリを指定しています。
ノンベアリポジトリ
/volume1/web/AAA
にノンベアリポジトリを作成しました。
この中で、gitを構成した後
git remote add origin /volume1/git/AAA.gitとコマンド実行しています。
この状態で上記のような
ファイルが見つからないというエラーが表示されてます。
試したこと
なお、網羅的に試していないので
下記のいずれかを見直さないと直らない場合があります。
①ファイルのアクセス権限を見直した。
ファイルに対して、chmodコマンドを実行して実行権限を付与しました。
=>変わらず。
②ファイルの作成方法を変えた。
cuiでviエディタにより作成。
=>変わらず。
guiでファイルを作成
=>変わらず。
③インタープリタの変更
実際は、どちらもbashなのですが、
shは、シンボリックリンクであるため、試してみます。
shだと使用できないコマンドもあるそうです。
#!/bin/sh
から
#!/bin/bash
に変更をしました。
=>変わらず。
④シェルスクリプトから直接実行してみる。
sshかリモート先のコンソール等から、bashを直接起動します。
which bashでパスを確認します。
そもそも、スクリプトに記述するパスと異なっていれば、
シバン(shebang)で実行できませんね。
では、post-receive内の記述を順に実行します。
cd /volume1/web/AAA
=>実行できた。
git –git-dir=.git pull
=>エラー
There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/ master
ここで記述ミスしていることを知りました。
ブランチが複数あったので指定をしてあげました。
git –git-dir=.git pull origin main
bashでは、うまく動作しました。
より、不可解ですね。
⑤post-receive内の記述をコピペせず入力
いよいよ、ファイル内の記述がおかしいと言うところまで来ました。
今まで、post-receive内の記述をコピペしていました。
最近のbashは便利なものでコピペできてしまいます。
Webで参考記述が無限にあるのでザザッとコピペしていましたが、
その記述を手入力してみました。
そして、ローカルからpush してみると、
サッッ
うまくいきました。
文字コードなんですかね。
海外のフォーラムには、エラー原因は文字コードとの記載もあり、
最初に疑っていたため
ファイル作成を意識していましたが。
コピペが原因とは。もっと早く試していれば。。。
おわりに
コピペは、事務界隈では必須スキルです。
ミスを減らし、効率的に業務を遂行できますが、
文字コードとかになると話は異なりますね。。。。
最近は、スタイルもコピペできるので、
エンジニアやクリエイターは、時と場合によって使い分けなくてはなりませんね。
ありがとうございました。
追記 2022.0623
なんだかんだ、#!/bin/bashを#! bin/bashと書いてしまったかもしれない。
コメント