新しい Web 開発プロジェクトでは、更新を Web サーバーの仮想ルートに自動的にプルする更新後フックを使用して共有リポジトリを構成しました。
#!/bin/sh
cd /srv/www/siteA/ || exit
unset GIT_DIR
git pull hub master
exec git-update-server-info
ただし、Web サーバーは suphp を実行し、各ファイルがユーザー「www-run」によって所有されていることを強制します。ただし、更新後のスクリプトは git push を開始したユーザーのコンテキスト内で実行されるため、更新されたファイルは www-run ではなくユーザーが所有します。最善の解決策は、sudo を使用して www-run ユーザーとして git pull を開始することだと考えたので、sodoers を次の行で更新しました (「webmaster」は、すべての git ユーザーがメンバーであるグループです)。
Defaults:%webmaster !requiretty
%webmaster ALL=(www-run) NOPASSWD: /usr/bin/git
更新後のスクリプトで、git pull行を次のように変更しました。
sudo -u www-run /usr/bin/git pull hub master
しかし、git push を実行しているクライアントで次のエラーが表示されます
remote: sudo: no tty present and no askpass program specified
デフォルトで tty が不要で、パスワードが不要であることを指定したので、これが機能しない理由がわかりません。