中央リポジトリでgitを使用しています(Gitosisを使用)。変更が中央リポジトリにプッシュされるたびに開発メーリングリストに電子メールを生成し、gitリポジトリのドキュメントフォルダーからドキュメントを生成するための受信後フックを作成しました。
したがって、〜git /にはディレクトリがあり、gitリポジトリのクローンを含む「a」と呼びます。受信後のフックは次のようになります。
#!/bin/bash
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( cd ~git/a && git pull &> ~git/pull_log.log && php ~git/a/scripts/generate_markdown_documentation.php &> ~git/doc_log.log )
電子メールスクリプトは機能していますが、ドキュメントの生成は機能していません。pull_log.logの内容は次のとおりです。
fatal: Not a git repository: '.'
これは、上記のスクリプトの5行目の正しいディレクトリに変更されていないと思います。私が間違っている?どうすればこれを機能させることができますか?
編集:応答で提案されているように、受信後のフックを更新しました。スクリプトは次のようになります。
#!/bin/bash
function die {
echo "$*" >&2; exit 1
}
function checkgit {
[ -d "$1/.git" ] || die "$1 could not possibly be a git repo; $1/.git is not a dir"
}
cd ~git/repositories/a.git
. ~git/post-receive-email &> /dev/null
( set -x
checkgit ~git/a
cd ~git/a
checkgit .
pwd
git pull
php ~git/a/scripts/generate_markdown_documentation.php )
そして、gitpushから次の出力が得られます。
+ checkgit /var/git/a
+ '[' -d /var/git/a/.git ']'
+ cd /var/git/a
+ checkgit .
+ '[' -d ./.git ']'
+ pwd
/var/git/a
+ git pull
fatal: Not a git repository: '.'
+ php /var/git/a/scripts/generate_markdown_documentation.php
これ以上の助けはありますか?
ああ、スクリプトを自分で実行すると、機能します(hooks / post-receiveと言って実行します)
serverfaultのおかげで、問題を発見しました。基本的に、環境変数はフックの実行時GIT_DIR
にGIT_WORK_TREE
設定され、これらはgitpullに悪影響を及ぼします。変数を設定解除すると、問題が修正されます。