
私は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人のユーザーに問題がない可能性があります。大きくて忙しい店には適していない可能性があります;-)