ドキュメントを更新し、単体テストを実行するなどのタスクを実行するgit Hook()がありますが、post-receive
時には正しく動作しません。
フックの内容は次のとおりですpost-receive
。
#!/usr/bin/bash
~/bubblegum_ci > /tmp/bubblegum_ci_log 2>&1 &
これは理解するのが難しくありません。バックグラウンドでスクリプトを起動し、stdoutとstderrをログファイルにパイプするだけです。
以下はbubblegum_ciの内容です。
#!/usr/bin/bash
id
cd /home/git/bubblegum
pwd
GIT_CURL_VERBOSE=1 GIT_TRACE=1 git pull -v .
make genhtml doxygen
これも簡単です。別のリポジトリに移動して変更をインポートし、呼び出してmake
実際の操作を実行します。時にはうまくいきます。時々、スクリプトは次の出力を提供します。
uid=1001(git) gid=1001(git) groups=1001(git),1002(www)
/home/git/bubblegum
fatal: not a git repository: '.'
make genhtml doxygen
<the output from make showing that the commits I just pushed have not been pulled>
最初の行/home/git/bubblegum
は明らかに出力pwd
ですが、gitはgitリポジトリではないのでインポートできません。私はこれが時々動作し、時には動作しないという事実のために混乱しています。ここで誰でもこの問題を説明できますか?私が知らない競争条件はありますか?そうでなければ、この種の仕事を処理するより良い方法があるかどうかを知りたいです。
/home/git/bubblegum/.git の権限は次のとおりです。
git@fancy-server:~$ ls /home/git/bubblegum -al | grep \\.git
drwxr-xr-x 8 git git 4096 Sep 2 09:58 .git
出力は次のとおりですls -l /home/git/bubblegum/.git/
。
$ ls -l .git
total 52
-rw-r--r-- 1 git git 84 Sep 2 09:58 FETCH_HEAD
-rw-r--r-- 1 git git 23 Aug 31 15:42 HEAD
-rw-r--r-- 1 git git 41 Sep 2 09:58 ORIG_HEAD
drwxr-xr-x 2 git git 4096 Aug 31 15:42 branches
-rw-r--r-- 1 git git 251 Aug 31 15:42 config
-rw-r--r-- 1 git git 73 Aug 31 15:42 description
drwxr-xr-x 2 git git 4096 Aug 31 15:42 hooks
-rw-r--r-- 1 git git 1875 Sep 2 09:52 index
drwxr-xr-x 2 git git 4096 Aug 31 15:42 info
drwxr-xr-x 3 git git 4096 Aug 31 15:42 logs
drwxr-xr-x 151 git git 4096 Sep 2 09:52 objects
-rw-r--r-- 1 git git 114 Aug 31 15:42 packed-refs
drwxr-xr-x 5 git git 4096 Aug 31 15:42 refs
siの出力は次のとおりですmount | grep home
。
/dev/sda6 on /home type ext4 (rw,relatime)
答え1
問題は環境変数に関連しています。ここの手がかりは、gitフックが実行される環境ではなくコマンドラインで動作することです。
env
だから私はスクリプトにコマンドを入れて気づきましたGIT_DIR="."
。これは不思議なエラーメッセージを説明しますfatal: not a git repository: '.'
。本当に、GIT_DIR設定は1つあり、環境変数をオーバーライドするコマンドラインオプションがあります。
コメントで、コマンドの最後に間違ったピリオドを指摘したRaphael Ahrensにも感謝しますgit pull .
。これで、Pullを実行するコマンドがこのようになり、うまくいってgit --git-dir="/home/git/bubblegum/.git/" pull -v
いるようです。