7

post-commitコミットが成功するたびに、次のフックを使用して特定のディレクトリにデプロイしようとしています。

#!/bin/sh
export GIT_WORK_TREE=/var/www/example/
export GIT_DIR=/home/mark/test/.git/
git checkout -f

ただし、コミット後に次のエラーが発生します。

$ git commit -m 'An example commit.'
fatal: Unable to create '/var/www/example/.git/index.lock': No such file or directory
[master 0938e48] An example commit.

...あたかもGIT_WORK_TREE設定が無視されているかのように。この環境変数の設定が機能していないように見えるのはなぜですか? 私はgitバージョン1.7.4.1を使用しています。

4

1 に答える 1

18

ここでの問題は、post-commitフック (および と も )で pre-commit環境変数が に設定されていることです。(これはgithooks documentationには記載されていませんが、環境変数の設定と git hooks の現在のディレクトリについて別の場所に投稿しました。)prepare-commit-msgcommit-msgtGIT_INDEX_FILE.git/index

GIT_INDEX_FILE環境変数の効果は、 gitman ページの ENVIRONMENT VARIABLES セクションで次のように説明されています。

GIT_INDEX_FILE

この環境 [変数] では、代替索引ファイルを指定できます。指定しない場合、デフォルトの$GIT_DIR/indexが使用されます。

...そして何らかの理由で、この状況でGIT_INDEX_FILEは、 に対して相対的に使用されていGIT_WORK_TREEます。

期待どおりにフックを機能させるには、単に unset を設定する必要がある GIT_INDEX_FILEため、フックは次のようになります。

 #!/bin/sh
 unset GIT_INDEX_FILE
 export GIT_WORK_TREE=/var/www/example/
 export GIT_DIR=/home/mark/test/.git/
 git checkout -f
于 2011-10-04T09:02:01.583 に答える