web-dev-qa-db-ja.com

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

非常に奇妙ですが、gitリポジトリを設定してpost-receiveフックを作成するときは、次のようにします。

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

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

その上での助けはかなりいただければ幸いです

どうもありがとう

17
zanona

フックの実行中に、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 のこれらの環境変数の詳細。

25
Tobu

これは機能しませんか?

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

編集済み

まだ良い

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

最初の推奨される答えは正解です-フックが実行されているとき、GIT_DIRなどが設定されます。ただし、別のリポジトリでスクリプトを使用できるようにしたい場合、GIT_DIRのリセットをハードコード化するため、その方法には問題があります。彼らが示唆するように、もう1つの方法は、envを使用して変数を次のように削除することです。 。

0
David Burton

〜の代わりにフルパスで試しましたか?

cd /home/smb/websites/testing
git pull
0
silk

スクリプトはおそらく/bin/shで呼び出されますが、~を理解できません。代わりに、~へのフルパスを使用して試してください。

0