Git-git pullを使用した受信後フック「有効なgitディレクトリが見つかりませんでした」


17

それは非常に奇妙ですが、gitリポジトリを設定し、以下で受信後フックを作成する場合:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

フックは実際に実行されますが、git pullを適切に実行することはできません。

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

だから私は今、フックにクローンをポストレシーブで更新させる方法を自問していますか?

この場合、プロセスを実行しているユーザーは同じであり、そのすべてがユーザーフォルダー内にあるので、私は本当に理解していません...手動で

cd ~/websites/testing
git pull

問題なく動作します...

その上で助けていただければ幸いです

どうもありがとう

回答:


25

フックの実行中、GIT_DIRおよび(ワークツリーが明示的に定義された場合)GIT_WORK_TREEが設定されます。これは、変更したディレクトリの2番目のリポジトリではプルが実行されないことを意味します。

試してみてくださいgit --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull。または、これでgitのレポローカル環境を設定解除します:

unset $(git rev-parse --local-env-vars)

これらの環境変数の詳細については、man 1 gitを参照してください


1
その東武に本当に感謝します、それは本当にうまくいきます、私はそれについてもより多くの情報をチェックします。乾杯
サノナ

6

私が経験したことの1つは、post-updateフック「--git-dir」の使用は素晴らしいことでしたが、gitはまだ「--work-tree」を使用しているにもかかわらず、作業ツリーの欠落について不平を言っていました

要するに、これは機能しませんでした:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

これはうまくいきましたが:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

これは機能しませんか?

cd /home/smb/websites/testing
env -i git pull

編集済み

まだまだ

cd /home/smb/websites/testing
unset GIT_DIR
git pull

0

〜ではなくフルパスで試しましたか?

cd /home/smb/websites/testing
git pull


0

最初の推奨される答えは正しいです-フックが実行されているときGIT_DIRなどが設定されます。ただし、別のリポジトリでスクリプトを使用できるようにしたい場合は、GIT_DIRをリセットするようにハードコードしているため、そのメソッドに欠陥があります。彼らが暗示しているように、他の方法は次のようにenvを使用して変数を削除することです:env -i git reset --hard明らかにあなたがそこで実行するコマンドはあなた次第です-それは重要なビットです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.