実験的には、現在のディレクトリをリポジトリのルートに設定してgitフックが実行されるようです。ただし、gitのドキュメントではそれについての保証はありません。gitリポジトリを見つけるために現在の作業ディレクトリに依存する必要がありますか、それともフックに関連付けられたgitリポジトリを解決するためのより良い方法がありますか?
回答:
これは、環境変数に設定された値に基づいていますGIT_DIR
。フックの実行が開始されると、リポジトリのルートに設定されます。多くのフック、特に別のリポジトリからプルを実行するフックは、必要に応じてこの環境変数を設定解除(およびリセット)します。
.git/hooks/post-commit: 1: .git/hooks/post-commit: post-commit_push_gitweb.sh: not found
現在の回答は古くなっているようです。2.9.0の時点で、ドキュメントには次のように記載されています。
Gitがフックを呼び出す前に、Gitはその作業ディレクトリを非ベアリポジトリの作業ツリーのルート、またはベアリポジトリの$ GIT_DIRに変更します。
.git
ディレクトリ、およびどのファイルがチェックアウトされていないと。)
環境変数を使用できます$GIT_DIR
。ディレクトリを$GIT_DIR
指し.git
ます。
$GIT_DIR/..
リポジトリルートを指す可能性はどのくらいありますか?
$GIT_DIR/..
。リポジトリが裸のリポジトリである場合、それは壊れます。ベアリポジトリには作業ディレクトリがないため、「リポジトリルート」はありません。また、代わりに.gitがリンクの場合は壊れます。
.git
なく、git reset --hard
実際にはディレクトリ内に作業ディレクトリ構造が作成されます。.git
これは、私の意見ではまったく間違っています。