2011-10-04 5 views
7

私が成功するたびにコミットした後、特定のディレクトリに展開するには、以下のpost-commitフックを使用しようとしている:GIT_WORK_TREEをポスト・コミット・フックで設定しないのはなぜですか?

#!/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を使用しています。

答えて

18

ここでの問題は(もと pre-commitprepare-commit-msgcommit-msgtpost-commitフックに GIT_INDEX_FILE環境変数が.git/indexに設定されていることです。 (この はgithooks documentationに記載されていないが、私は は他about the settings of environment variables and the current directory in git hooksを掲載しました。)

GIT_INDEX_FILE環境変数の効果がようgit manページの環境変数セクションで に記載されている:

GIT_INDEX_FILE

This environment [variable] allows the specification of an alternate index file. If not specified, the default of $GIT_DIR/index is used.

...何らかの理由で、この状況では、GIT_INDEX_FILEは、GIT_WORK_TREEに対して、 が使用されています。これもworktreeとgitdirオプションはgitの上で動作させるために使用することができ

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

:あなたが期待するよう、あなたのフックは次のようになりますので、あなただけの、 GIT_INDEX_FILEの設定を解除する必要があるフックを動作させるために

隠しやその他のコマンド? 'git --worktree --gitdir 'は特定のコマンドでのみ動作するようです。 –

+0

@Adam Dymitruk:私は '--work-tree = DIRECTORY'と' --git-dir = DIRECTORY'がコマンドに関係なくフックの外側で確実に動作することを発見しました。 (b)最終的な作業ツリーとリポジトリディレクトリがどのように計算されるかについての混乱する規則を覚えておかなくてはならないように、それらを絶対パスに設定してください。 –

+0

これはフックの外にあります。いくつかの仕事は、いくつかはありません。私は、彼らのいくつかが相対的なパスのために動作しないかどうかを確認する必要があります。しかし、私は同じパスを使用しているだけで、コマンド。 –

関連する問題