[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
質問
共有の git リモートにプッシュしようとすると、以下のエラーが発生します。
insufficient permission for adding an object to repository database
そして、ここで修正方法を読みました。 修正 これは、すべてのファイルが正しいグループであったため、次のプッシュではうまくいきました。しかし、次に誰かが変更をプッシュすると、objects フォルダにその人のデフォルトグループをグループとする新しいアイテムが作成されました。唯一考えられるのは、開発者がチェックインするアイテムのデフォルトグループをすべて変更することですが、これはハッキングのように思えます。 何かアイデアはありませんか?ありがとうございます。
解決方法は?
パーミッションの修復
根本的な原因(下記参照)を特定し、修正した後、パーミッションを修復します。
cd /path/to/repo.git
sudo chgrp -R groupname .
sudo chmod -R g+rwX .
sudo find . -type d -exec chmod g+s '{}' +
誰もがリポジトリを変更できるようにしたい場合は、このように
chgrp
に変更し、chmod を
sudo chmod -R a+rwX .
根本的な原因を解決しないと、何度もエラーが発生し、上記のコマンドを何度も再実行する必要があります。
根本的な原因
エラーの原因は、以下のいずれかである可能性があります。
-
リポジトリが共有リポジトリとして設定されていない (
core.sharedRepository
でgit help config
). という出力があればgit config core.sharedRepository
は
group
またはtrue
または1
などのマスクをつけて、実行してみてください。git config core.sharedRepository group
を再実行し、再帰的な
chmod
とchgrp
(上記の "Repair Permissions" を参照)。 -
オペレーティングシステムは、ディレクトリの setgid ビットを "すべての新しいファイルとサブディレクトリはグループオーナーを継承する必要があります" として解釈しません。
いつ
<ブロッククオートcore.sharedRepository
はtrue
またはgroup
, Gitは、新しく作成されたサブディレクトリが正しいグループ(リポジトリのすべてのユーザーが属しているグループ)によって所有されることを保証するために、GNUオペレーティングシステム(例えば、すべてのLinuxディストリビューション)の機能に依存しています。 この機能についてのドキュメントは GNU coreutils ドキュメント :... [ディレクトリの set-group-ID ビットが設定されている場合、新しく作成されたサブファイルはディレクトリと同じグループを継承し、新しく作成されたサブディレクトリは親ディレクトリの set-group-ID ビットを継承します。... [この機構により,ユーザはより簡単にファイルを共有することができます.
chmod
またはchown
をクリックすると、新しいファイルを共有できます。しかし、すべてのOSにこの機能があるわけではありません(NetBSDがその一例です)。 そのようなオペレーティング・システムでは、すべてのGitユーザーが同じデフォルト・グループを持っていることを確認する必要があります。 あるいは、次のコマンドを実行することで、リポジトリを世界的に書き込み可能にすることができます。
git config core.sharedRepository world
(ただし、安全性に欠けるので注意が必要です)。 -
ファイルシステムが setgid ビットをサポートしていない (例: FAT) ext2、ext3、ext4 はすべて setgid ビットをサポートしています。 私の知る限り、setgid ビットをサポートしていないファイルシステムは、グループオーナーシップの概念もサポートしていないので、すべてのファイルとディレクトリは、とにかく同じグループによって所有されます (どのグループがマウントオプションなのか)。 この場合、すべてのGitユーザーが、ファイルシステム内のすべてのファイルを所有するグループに属していることを確認してください。
-
すべてのGitユーザーが、リポジトリ・ディレクトリを所有する同じグループに属しているわけではありません。 ディレクトリのグループオーナーが正しく、すべてのユーザーがそのグループに属していることを確認しましょう。
関連
-
[解決済み] リモート Git リポジトリの URI (URL) を変更するには?
-
[解決済み] 新しいローカルブランチをリモートの Git リポジトリにプッシュし、それを追跡するにはどうすればよいのでしょうか?
-
[解決済み] Git を使ってタグをリモートリポジトリにプッシュするには?
-
[解決済み] リモートにないトラッキングブランチを削除
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] Gitのプッシュを正しく強制する方法は?
-
[解決済み] ブランチが追跡しているリモートを変更するには?
-
[解決済み] この "u "は具体的に何をするのですか?"git push -u origin master" と "git push origin master" の違い。
-
[解決済み】Featureブランチのリベースの後、Gitプッシュが拒否される。
-
[解決済み】Gitのワークフローとrebaseとmergeの質問
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Gitマージで「すでに最新」と報告されるが、違いはある
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
[解決済み】Githubの認証に失敗した - ... GitHubはシェルアクセスを提供しない
-
[解決済み】なぜ「git commit」は私の変更を保存しないのですか?
-
git commit リモートエラー [rejected] master -> master (フェッチファースト)
-
[解決済み] fatal: EOF が早い fatal: インデックスパックが失敗した
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] git status に fatal: bad object HEAD と表示される。
-
[解決済み] 新しいBitbucketでリポジトリを削除するにはどうすればよいですか?
-
[解決済み] GitHub "fatal: リモートオリジンはすでに存在する"