Ubuntu Linux 仮想マシンでホストされているリモート Git ベア リポジトリがあり、その上に Apache があり、ローカル ネットワークで http 経由でアクセスできます。サーバーを構成するとき、このマニュアルを使用しました: http://blog.bobbyallen.me/2012/07/23/installing-a-git-server-using-apache-webdav-on-ubuntu-server-12-04/
Ubuntu は Samba 共有を介してそのディレクトリにアクセスできますが、このリポジトリを自分の Web サイト (非裸のリポジトリがある) に伝播するつもりです。
したがって、次のようなものがあります。
|私のPC| ==プッシュ==> | http://user@myhub.git/myproject.git| ==(受信後フック)==> |/samba/mywebsite/|
私の考えは、IDE (PhpStorm) から変更をプッシュしたときにそのようなことを行う受信後フックを作成することでした。
#!/bin/sh
echo "Pulling content from hub to website"
echo "Pulling content from hub to website" >> /tmp/git.log
cd /samba/mywebsite/ || exit
unset GIT_DIR
git pull hub master
cd /var/www/myproject.git
git update-server-info
もちろん、その前に、Web サイトのリポジトリ内で次のように宣言しました。
git remote add hub /var/www/myproject.git
問題は、IDE からプッシュを実行したときに post-receive フックが実行されないことです。最初にエコーのある行に書き込まれた結果が表示されません (IDE ログにも、/tmp/git.log ファイルにもありません)。 )。プッシュ自体は正常に実行されることに注意してください。
実際、問題はもっと深刻です: フックがまったく起動しません。post-receive、update、および post-update フックを試しましたが、何もありません...「echo 111>>/tmp/git.log」のような行をそれぞれに配置しましたが、何も起こりません。
さらに、これらのフックの 1 つを手動で起動しようとすると、すべてが正常に機能し、ウェブサイドが更新を受け取ります。
sudo -u www-data ./post-receive
もちろん、私はユーザー www-data の読み取り/書き込み/実行権限を持っており、www-data は /var/www ディレクトリ内のすべてを所有しています。実際、そのディレクトリ内のすべてのコンテンツに対して 0777 パーミッションを設定しました。
git push origin を手動および IDE から実行しようとしましたが、結果は同じでした。!#/bin/sh と !#/bin/bash を使用しようとしましたが、効果はありません。
更新:
サーバーでこれを実行しました:
cd ~
git clone /var/www/myproject.git
cd myproject
echo "newline">>README.txt
commit -a -m "Test commit"
git push origin
そして奇跡が起こりました - うまくいきました!メインリポジトリからの回答を見て、フックは次の順序で実行されました:更新、受信後、更新後。
したがって、http を介して変更をプッシュする際に問題があると思います。しかし、なぜそうなるのかはわかりません。