権限の構成

権限の構成

私はSSH経由で友達とgitリポジトリを共有しています。彼は自分のコンピュータのSSHサーバー(共有Gitリポジトリがある場所)を使用して自分のGitリポジトリからプッシュしてインポートします。

問題は、彼がコミットをプッシュすると、コミットがjanito users rwx------(権限のあるメタデータであるため)私がプルできないことです。

gitというグループを作成し、彼と私自身を追加し、リポジトリはです。権限を気にせずに常にプルしてプッシュできるように、リポジトリjpmelos git rwxrwx---ディレクトリに作成されたファイルを強制的に適用するにはどうすればよいですか?<creator> git rwxrwx---

もちろん、あるいは問題に対するより良い解決策を思い出すこともできます。制限は、自分のコンピュータでSSHを使用する必要があることです(まだコードを公開する準備ができていません)。作業リポジトリとは別に作成したベアリポジトリですでにプッシュとプールを実行しています。

ありがとうございます!

答え1

umaskの問題はGit構成変数で解決できますcore.sharedRepository

( cd /path/to/shared-repository.git &&
git config --bool core.sharedRepository true
)

Gitは、新しいファイルまたはディレクトリを作成するたびにグループビットが正しく設定されていることを確認します(呼び出し側のユーザーのumaskが「広すぎる」場合でも、常にグループ読み取り可能、グループ書き込み可能、​​適切な場合は実行可能)。
注:このcore.sharedRepository設定はGit自体で作成されたアイテムにのみ適用されるため、デフォルト以外のリポジトリの作業ツリーにあるアイテムの権限を設定するのには役立ちません。これを行うには、umaskを手動で設定する必要があります。

gitグループが所有する新しいファイルとディレクトリを設定できます。ディレクトリの setgid ビットchgrp適切なグループにファイルとディレクトリを追加した後)

chgrp -R git /path/to/shared-repository.git &&
find /path/to/shared-repository.git -type d -exec chmod g=rwxs '{}' \;

最初から新しいリポジトリを作成する場合は、空のchgrpディレクトリを作成してgit init --shared実行します(GitはGIT_DIRでタスクを設定して実行しますcore.sharedRepository)。chmod g=rwxs

mkdir new-shared.git &&
chgrp git new-shared.git &&
git init --bare --shared new-shared.git

答え2

友達のumask設定は何ですか?彼にumaskサーバーのコマンドプロンプトに入力し、何が起こっているのかを確認させます。0077(または)と表示されている場合は、077「ファイルの作成時にグループまたは他のグループのすべての許可ビットをクリアする」ことを意味するため、問題になる可能性があります。

より適切なumaskは、0027生成されたファイルに対するグループの読み取りと実行権限を許可することです。を実行して一時的に設定することも、umask 0027追加に~/.profile永続的に設定することもできます~/.bash_profile

答え3

Gitフックでカスタムスクリプトを作成すると、これを行うことができると思います。 Gitリポジトリを複製している人なら誰でも利用できる限り、すべてのスクリプト言語が可能です。Pro GitでGitフックについて学びます。

答え4

考慮すべきその他の事項:

pam_umask

pamを使用してumaskを制御するには、次UsePAM yesのようにsshd_configで設定します/etc/pam.d/sshd

session    optional     pam_umask.so umask=0027

アクセス制御リスト

読むGillesの投稿はここにあります。。これにはインストール手順が含まれています。これが愚かな質問であるかどうかはわかりませんが、このページを読む価値があります。 :-)

既存のリポジトリでaclを変更するには、次の手順に従ってください。

find git_repository/ -type d -exec setfacl -m d:g:git:rwx {}
find git_repository/ -f -exec setfacl -m g:git:rwx {}

クイックアンドダーティー:フック

前述のようにフックを作成し、次のようgit_repository/hooks/post-updateに編集します。

#!/bin/sh
chmod -R g+w . 2>/dev/null
chgrp -R git . 2>/dev/null

これにより、更新するたびに問題が解決され、小規模のストレージと2人のユーザーに問題がない可能性があります。大きくて忙しい店には適していない可能性があります;-)

関連情報