2

このサイトにリストされている例に従って、ファイルをサーバーにリモートで追加しましたnginx:nginxが、ファイルをプッシュした後にブラウザからファイルにアクセスできるように、すべてのファイルを user:group に所有させたいと考えています。

リモートの「ubuntu」サーバーにプッシュされたファイル/フォルダーの所有者になるpost-receiveようにフックを修正するにはどうすればよいですか?nginx:nginx

次のフックを試しましたがpost-receive、ファイルが修正されている場合はエラーが表示されます: remote: error: unable to unlink old 'index.html' (Permission denied)、シェルスクリプトはこちら:

#!/bin/sh
GIT_WORK_TREE=/var/www/www.foo.com/htdocs
export GIT_WORK_TREE
git checkout -f
exec sudo chown -R nginx:nginx $GIT_WORK_TREE

助けてくれてありがとう!

4

1 に答える 1

0

これは通常、「 Git チェックアウトの警告: ファイルのリンクを解除できません。許可が拒否されました 」で説明されているように、プロセスがそれらのファイルを解放していない (git チェックアウトがジョブを実行できない) ことの結果です。

しかし、コマンドが 1 回正常に機能した結果、' ' ユーザーsudoとしてチェックアウトする権利がなくなったため、今後のフックの実行が失敗する可能性もあります。git

その場合、フックは最終結果 (Web 作業ツリー)ではなく、現在の git コマンドsudoとして使用する必要があります。nginx:nginxchown


OPは確認します:

post-receive私が今持っているgitフックにはexec sudo -u nginx -g nginx ~/test.sh(上記test.shの内容が含まれていGIT_WORK_TREEます)。
ただし、別のアクセス許可エラーが発生します: remote: fatal: Unable to create '/home/ubuntu/foo.git/index.lock': Permission denied.
を実行~/test.shした後、 に戻る必要がありubuntu:ubuntuますか?

私は提案します:

「多くのアカウントで Sudo なしで Git を使用する」のように、レポを「shared by all」として宣言します。

問題を解決するようです:

shared=true言及された投稿に従って構成を設定しましたが、現在は機能しているようです。

于 2012-09-22T20:07:40.390 に答える