非常に奇妙ですが、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
問題なく動作します...
その上での助けはかなりいただければ幸いです
どうもありがとう
フックの実行中に、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 のこれらの環境変数の詳細。
これは機能しませんか?
cd /home/smb/websites/testing
env -i git pull
編集済み
まだ良い
cd /home/smb/websites/testing
unset GIT_DIR
git pull
最初の推奨される答えは正解です-フックが実行されているとき、GIT_DIRなどが設定されます。ただし、別のリポジトリでスクリプトを使用できるようにしたい場合、GIT_DIRのリセットをハードコード化するため、その方法には問題があります。彼らが示唆するように、もう1つの方法は、envを使用して変数を次のように削除することです。 。
〜の代わりにフルパスで試しましたか?
cd /home/smb/websites/testing
git pull
スクリプトはおそらく/bin/sh
で呼び出されますが、~
を理解できません。代わりに、~
へのフルパスを使用して試してください。