VPSで自分のgitリポジトリをホストしています。私のユーザーがジョンだとしましょう。
私はsshプロトコルを使用してgitリポジトリにアクセスしているため、URLはssh://[email protected]/path/to/git/myrepo/
のようになります。
ルートは、/path/to/git
の下にあるすべての所有者です
/path/to/git/myrepo
の下にあるすべてのユーザーにjohnへの読み取り/書き込みアクセス権を付与しようとしています
私はchmod
とsetfacl
の両方を試してアクセスを制御しましたが、どちらも同じように失敗します。それらはすべての現在の既存のサブディレクトリ of /path/to/git/myrepo
ですが、新しいディレクトリが作成されるとすぐに、ユーザーは新しいディレクトリに書き込むことができません。
Gitには、各コミット後に権利を再適用できるフックがあることは知っていますが、これは非常に基本的な目的には複雑すぎるため、間違った方向に進んでいると思い始めています。
[〜#〜] q [〜#〜]:rwにjohnへのアクセス権を/path/to/git/myrepo
の下にあるすべてのものに付与し、ツリー構造の変更に復元できるようにするには、どうすればよいですか?
Q2:一般的なアプローチを変更する必要がある場合は、教えてください。
編集:質問はそのまま回答されましたが、それは間違った質問でした。正しい質問は、「sshアクセスで使用するためにサーバー上で裸のgitリポジトリを構成する方法」でしょう。私自身の答えを見てください。
たとえば、グループmyrepousers
を作成し、gitユーザーをそのグループに追加します。
次に、/ path/to/git/myrepoの下にあるすべてのグループをmyrepousersに変更します。
chown -R .myrepousers /path/to/git/myrepo
次に、権限を修正します。
chmod -R g+w /path/to/git/myrepo
find /path/to/git/myrepo -type d -exec chmod -R {} g+s \;
すべて設定する必要があります。
実際、それは間違ったアプローチでした。追加の調査の結果、私は私の場合、リポジトリ内のファイルシステムの権利を処理するためにgitのビルドイン機能を使用する必要があることを発見しました。
基本的には、git init
のshared
オプションを使用して行われます。
group
:リポジトリを初期化して、ファイルとディレクトリにユーザーとグループの書き込みアクセス権を与え、他の全員に読み取りアクセス権を与える0660
:同じですが、他のユーザーの読み取りアクセス権はありません。新しく作成されたディレクトリとファイルには、適切な権限が自動的に付与されます。既存のリポジトリでgit init
を使用して、コンテンツを失うことなく再構成することもできます。
結局私がしなければならなかったこと:
mygitrepo
root:mygitrepo
にそして今、グループのすべてのユーザーはプル/プッシュできますが、他の誰もできません。それは、ファイルシステムの権限をいじることなく可能です。
git init --bare --shared=0660
http://www.kernel.org/pub/software/scm/git/docs/git-init.html 詳細情報。
ACLがサポートされている場合は、デフォルトのACLを使用して実行できます。 ls -l
を実行しても表示されないため、これらのことは忘れがちです。
find /path/to/git/myrepo -type d -exec setfacl -m d:u:john:rwx {} +
しかし、もう少し整理された何かをしたいと思うかもしれません。ギトライトを導入すると、より良いソリューションが得られる場合があります。