3

ローカルとサーバーで git をセットアップし、'post-receive' を作成して、ライブ サーバーにプッシュしたときに Web サイトの仮想ホスト ディレクトリにチェックアウトするようにしました。

#!/bin/sh
GIT_WORK_TREE=/var/www/domainname/public_html/ git checkout -f

ただし、プッシュを実行しようとすると、マスターは正常に送信されますが、サーバーの Web ルートでこれらのファイルを作成しようとすると、アクセス許可が拒否されたというエラーが発生します。

例えばremote: error: unable to create file index.php (Permission denied)

これらのエラーは、サーバーのセットアップ方法により、実際には意味があります。root アクセスを無効にし、visudo を介して sudoers に追加される新しいユーザーを作成しました。次に、このユーザーの SSH キーを設定しました。このユーザーを使用して、git の変更をサーバーにプッシュします。

問題は、プッシュに接続しているこのユーザーが、仮想ホスト ディレクトリに書き込む権限を持っていないことだと思います。これらのフォルダー内のすべてのファイルは、同じグループの www-data (私の nginx ユーザー) によって所有されています。

解決策は何ですか?より高い権限を持つ git のためだけに接続する SSH キーを持つ別のユーザーを作成しますか、または受信後の sudo のような機能を付与する方法はありますか?

非常に長々とした質問で申し訳ありませんが、私がしたことを完全に明確にしたかったのです。

4

1 に答える 1

0

オプションを使用してリポジトリを作成した--shared場合 (「GIT リポジトリを共有に変更する」を参照)、同じグループのユーザーがアクセスして書き込みできるようになります。

これらの異なるユーザーを同じグループにグループ化する方法はありますか? 「 Git はファイル権限を作成できません」同じグループ
で言及されているものと少し。または、この質問 のコメントで説明されている sudo アクセス、sudoers の変更:

 git ALL = (root) NOPASSWD: /usr/local/sbin/prgetsimpleappscom 
于 2013-04-07T11:04:02.747 に答える