GitHubへのプッシュエラー-オブジェクトをリポジトリデータベースに追加するための十分な権限がありません


126

GitHubリポジトリに「git push」を実行しようとすると、異常なエラーが返されます。

オブジェクトのカウント:8、完了。
2つのスレッドを使用したデルタ圧縮。
オブジェクトの圧縮:100%(4/4)、完了。
オブジェクトの書き込み:100%(5/5)、1.37 KiB、完了。
合計5(デルタ2)、再利用0(デルタ0)
エラー:リポジトリデータベース./objectsにオブジェクトを追加するための十分な権限がありません

致命的:オブジェクトの書き込みに失敗しました
エラー:アンパックオブジェクトがエラーコード128で終了しました
エラー:アンパック失敗:アンパックオブジェクト異常終了
git@github.com:bixo / bixo.git
 ![リモート拒否]マスター->マスター(n / a(アンパッカーエラー))
エラー:一部の参照を 'git@github.com:bixo / bixo.git'にプッシュできませんでした
  • GitHubからクリーンなクローンを作成した後、変更したファイルを編集/追加/コミット/プッシュできます。
  • これをもう一度繰り返すと、上記のエラーが発生します。
  • 他のGitHubリポジトリに問題なくプッシュできます。
  • 私は自分の側でファイル/ディレクトリのアクセス許可を確認しましたが、問題はないようです。
  • Mac OS X 10.5.8でgit 1.6.2.3を実行しています

上記のリポジトリは、以前のスタックオーバーフローの質問(SO 1904860)の楽しみの源でした。そのため、GitHubリポジトリが破損した可能性があります。私が検索で見つけた唯一の同様の問題は、githubで報告されたアンパックの失敗の問題でした。他の誰かが以前にこの問題に遭遇したことがありますか?特にGitHubを使用していない場合?



1
このエラーのある人への別のヒント:間違ったユーザーを使用してプッシュしたため、このエラーが発生しました。私のサーバーにはユーザーfooとがありgitます。どちらも読み取り可能ですが/opt/git/<repo>git書き込みのみ可能です。gitで何も指定されていない場合は、デフォルトで現在のユーザーに設定されます.git/config。以下の複雑な答えは必要ありませんでした。
セバスチャン

回答:


209

githubの外でこのエラーが表示された場合の対処法を次に示します。

これを手に入れました:http : //mapopa.blogspot.com/2009/10/git-insufficient-permission-for-adding.html

ssh me@myserver
cd repository/.git

sudo chmod -R g+ws *
sudo chgrp -R mygroup *

git config core.sharedRepository true

この後、gitデーモンは.git / objectsへの書き込み時にグループファイルの権限を使用する必要があります。


4
+1うまくいきました。何のための「の」sudo chmod -R g+ws *ですか?
エリックB

5
これにより、別のユーザーが作成した新しいファイルは、ルートディレクトリのグループ権限を維持できます。そうしないと、リポジトリにプッシュするときにエラーが発生します。setuidとsetgidを参照してください
syvex '07 / 07/17

Debian 6とPHPStorm IDEのGitoriousでも同じエラーが発生し、「エラー:オブジェクトをリポジトリデータベース.git / objectsに追加するための権限が不十分です」というメッセージが表示されました。私はこのソリューションをプロジェクトの親フォルダーで使用し、「+ sトリック」でうまく機能しました。
ベンジ2013

3
repo-configは廃止されました。する必要がありますgit config core.sharedRepository true
lpapp 14年

4
注:ワイルドカード「を使用した場合、隠しファイルやフォルダー(.git!など)は影響を受けない可能性があります。したがって、上記の場合はあなたのための仕事は、./.gitためのコマンドを実行していないとしても
ベンRogmans

54

通常、この問題は、Gitサーバーのファイルシステムに対する誤ったユーザーおよびグループの権限が原因で発生します。gitリポジトリは、ユーザーとそのグループが所有している必要があります。

例:

ユーザーが「git」と呼ばれ、彼のグループが「gitgroup」であり、Gitリポジトリの場所がgit@mygitserverxyz.com:path / to / repo.gitである場合

次に、以下を実行します。

sudo chown -R git:gitgroup path / to / repo.git /

これにより、Gitの不十分な権限エラーが修正されました。


chown:無効なユーザー: `git:git '
Alan Coromano

4
@MariusKavanskyはgit:gitの代わりに$ USER:$ USERを試行します
dwurf

私の場合、これはしばらくの間のみ機能します。少しプッシュした後でやり直さなければなりません。
BuZZ-dEE 2013年

これが最良の答えですが、chownを ".git / objects"に制限でき、 "git"を呼び出すユーザーは、ログインしているユーザーだけです。ユーザーであるという事実がgitサーバーに知られているかどうかは重要ではありません。
トリスタン

34
sudo chmod 777 -R .git/objects

4
これは私にとってはうまくいきました...しかし、WTF ?? 私は何ヶ月もリポジトリを更新してきましたが、これは今日の午後に突然開始しました...
GojiraDeMonstah

私にとっての修正はほとんど同じでしたが、.gitディレクトリ内のいくつかのファイルの所有者を変更/修正する必要がありました。「root」としてログインしているときにgitのメンテナンスを行ったところ、所有者がrootに変更されたか、gitが依存していたrootの所有者でいくつかの新しいファイルが作成されたようです。私は 'apache'所有者の下で自動展開スクリプトを実行していて、それが機能しなくなりました。
コートサップ2015年

9
chmod 777決して良いソリューションではなく、単に安全でない回避策です。代わりに@Syvexの答えを試してください(setgidを使用)
4wk_

10

私がしようとしたとき、これは私に起こりましたgit pull。一部の分析では、誰かが過去にrootでコミットしたため、でroot所有権を持つオブジェクトがいくつか作成されたことが示されました.git/objects

だから私は走った

cd <repo>
la .git/objects/

rootこれは、次のようないくつかのオブジェクト(ディレクトリ)の所有権を示しています。

user@host:/repo> la .git/objects/
total 540
drwxr-xr-x 135 user user 4096 Jun 16 16:29 .
drwxr-xr-x   8 user user 4096 Jun 16 16:33 ..
drwxr-xr-x   2 user user 4096 Mar  1 17:28 01
drwxr-xr-x   2 user user 4096 Mar  1 17:28 02
drwxr-xr-x   2 user user 4096 Jun 16 16:27 03
drwxr-xr-x   2 user user 4096 Mar  3 13:22 04
drwxr-xr-x   2 root root 4096 Jun 16 16:29 05
drwxr-xr-x   2 user user 4096 Jun 16 16:28 07
drwxr-xr-x   2 root root 4096 Jun 16 16:29 08

それから私は走った

sudo chown -R user:user .git/objects/

そしてそれはうまくいった!

もちろん、ユーザーを実際のユーザーに置き換えていました。


4

上記のどれも私にとってはうまくいきませんでした。数時間後、私は問題の理由を見つけました:私はタイプのリポジトリURLを使用しました

ssh://git@example.com/~git/repo.git

残念ながらexample.com、ユーザーとしてログインするように設定された名前でputtyセッションを保存しましたmyOtherUser

したがって、git example.comがユーザー「git」を使用してホストに接続していると思いましたが、Git / TortoiseGitはexample.comユーザーを使用するputtyセッションに接続していますmyOtherUser。これにより、まったく同じ..insufficient permission..エラーが発生します(両方のユーザーが異なるグループに属しているため)。

解決策:パテセッションの名前example.commyOtherUse@example.com


4

chmodはchownである必要があるため、正しい行は次のとおりです。

sudo chown -R gituser:gituser objects

3

奇妙なことに、私が持っていたリポジトリの1つのクローンでこの問題が発生しましたが、別のクローンでは発生しませんでした。(同僚がこの問題をうまく回避するために行った)リポジトリの再クローン化とは別に、失敗が始まる前に持っていたコミットに「git reset」を実行することができました。その後、変更を再度コミットしましたが、その後、正常にプッシュすることができました。そのため、サーバーに問題があったすべての兆候にもかかわらず、この場合は、ローカルリポジトリに奇妙な点があることを示しているようです。


3

ユーザーがコンテンツをプッシュするたびに、ファイルのグループがユーザーに変更されるため、このエラーが発生しました。そして、他のユーザーがリポジトリにプッシュしようとすると、権限エラーが発生し、プッシュが拒否されました。したがって、リポジトリの設定を変更するようシステム管理者に依頼して、リポジトリ内のファイルのグループがユーザーによるプッシュで変更されないようにする必要があります。

このような問題を回避するには、gitリポジトリを初期化するときに、 "git init --shared = group"コマンドを使用してください。


より詳細な説明のためにあなたは、リンクを参照することができますstackoverflow.com/questions/16183345/...
アルン・チャウダリー

2

あなたはまだ、後でこのエラーが出る場合は権限を設定する、あなたの作成マスクを変更する必要があります。新しいコミット(オブジェクトの下のフォルダー)がまだグループ書き込み権限なしで作成されているため、コミットした人だけがリポジトリにプッシュできることがわかりました。

これを修正するには、SSHユーザーのumaskを002に設定し、適切なグループをすべてのユーザーが共有します。

例えば

umask 002

中央の0は、デフォルトでグループ書き込みを許可しています。


UnixまたはLinuxにそのようなコマンドがあると確信していますか?なぜなら、umaskは場所固有ではないからです。
Jan Hudec

はい、ごめんなさい。ディレクトリパラメータが余分にあると思った理由がわかりません。それは単にユーザーに適用されます。コメントを更新しました。
scipilot

2

あなたが何かを追加した後...それらをコミットし、結局それをプッシュしてください!バン!! すべての問題を開始します...気づくはずですが、新規プロジェクトと既存プロジェクトの両方の定義方法にはいくつかの違いがあります。他の誰かが同じファイルまたはコンテンツを追加/コミット/プッシュしようとすると(gitは両方を同じオブジェクトとして保持します)、次のエラーが発生します。

$ git push
Counting objects: 31, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done.
Total 21 (delta 12), reused 0 (delta 0)
remote: error: insufficient permission for adding an object to repository database ./objects  remote: fatal: failed to write object

この場合は制限されているため、この問題を解決するには、運用システムの権限システムを念頭に置く必要があります。Tuは問題をよりよく理解し、先に進み、gitオブジェクトのフォルダー(.git / objects)を確認します。あなたはおそらくそのようなものを見るでしょう:

<your user_name>@<the machine name> objects]$ ls -la
total 200
drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 .
drwxr-xr-x  3 <his user_name> <group_name> 1024 Feb  3 15:06 ..
drwxr-xr-x  2 <his user_name> <group_name> 1024 Jan 31 13:39 02
drwxr-xr-x  2 <his user_name> <group_name> 1024 Feb  3 13:24 08

*これらのファイルの権限はユーザーにのみ付与されていることに注意してください。誰も変更することはできません... *

Level       u   g   o
Permission rwx r-x ---
Binary     111 101 000
Octal       7   5   0

問題の解決

スーパーユーザー権限がある場合は、ステップ2を使用して自分ですべての権限を進めて変更できます。それ以外の場合は、ユーザーで作成されたオブジェクトを持つすべてのユーザーに質問する必要があります。次のコマンドを使用して、ユーザーを確認します。 :

$ ls -la | awk '{print $3}' | sort -u 
<your user_name>
<his user_name>

これで、あなたとすべてのファイルの所有者ユーザーは、これらのファイルの権限を次のように変更する必要があります。

$ chmod -R 774 .

その後、ドキュメントに従って、-shared = groupと同等の新しいプロパティを追加する必要があります。ドキュメントに従って、これによりリポジトリをグループ書き込み可能にして、実行します。

$ git config core.sharedRepository group

https://coderwall.com/p/8b3ksg


2

以下を実行してみてください:

サーバーに移動します

    cd rep.git
    chmod -R g+ws *
    chgrp -R git *
    git config core.sharedRepository true

次に、作業コピー(ローカルリポジトリ)に移動して、再パックします git repack master

私には完璧に動作します。


2

あなたはこれを使うことができます

sudo chown -R $USER:$USER "$(git rev-parse --show-toplevel)/.git"

1
これは何をしていますか?説明を追加できますか?
Anubian Noob 2014

これにより、リポジトリの最上位ディレクトリが取得されるため、コマンドは現在のリポジトリのどこにあるかに関係なく機能します。$ USERの.git:あなたがルートにすでにしている場合は、あなただけのsudoをchownを-R $ USER実行することができます
タンタム

質問に編集してください。そうでなければあなたの質問はかなり役に立たない。
Anubian Noob 2014

2
sudo su root

chown -R user:group dir

dirはgitリポジトリです。

次に行います:

git pull origin master

他の人によるコミットに関する変更が表示されます。


2
 user@M063:/var/www/html/app/.git/objects$ sudo chmod 777 -R .git/objects
 user@M063:/var/www/html/app/.git/objects$ sudo chown -R user:user .git/objects/

1

OK-emi / bixoからbixo / bixoへの分岐中に発生したのはGitHubの権限の問題でした。Tekkubがこれらを修正すると、再び機能し始めました。


何が起こったのですか、どうやって修正しましたか?少し前のことだと思います...何かアイデアはありますか?
メタグラファー、2012年

1
それはGitHub側の問題でした-だから彼らがそれを修正するために何をしたのか正確にはわかりません、ただGitHubの "Tekkub"が "許可を修正しました"と言ってそれが機能しました。
kkrugler、2012年

涼しい。情報をありがとう。私はレポを再クローニングしました。最適ではありませんが、うまくいきました。乾杯!
メタグラファー、2012年

4
私たちは、ええと、グリッチを修正しました。だから彼はもう給料をもらえないので、自然にうまくいくだろう。
アラン

1

エラーはオブジェクトフォルダーのアクセス許可を扱っているため、オブジェクトフォルダーで直接chownを実行しましたが、うまくいきました。


1

これは機能します:

sudo chmod -R gituser.gituser objects

1
いいえchmod。ファイルのアクセス許可を変更し、ユーザーやグループではなく、引数としてモードを必要とします。それはどちらchmod -R ${some_octal_num} blaかですchown -R ${some_user}:${some_group} bla
デニスウィンター

1

私のような多くの人が、上記のgitの問題が発生したときに、このようなフォーラムに行き着くと思います。しかし、問題を引き起こす原因はたくさんあるので、すでに上で学んだように、他の人たちに私の悩みの原因を教えたいと思います。

私はサイトコムからLinux NASに私のレポジトリを持っています(サイトコムからNASを購入しないでください)。私はここに多くのコンピューターに複製されたレポを持っていますが、突然プッシュを拒否されました。最近、NASがsqueezeboxサーバーとして機能するようにプラグインをインストールしました。

このサーバーは、共有するメディアをスキャンします。私が知らなかったのは、バグのために、サーバーがユーザーとグループの設定を、検索するすべてのファイルのsqueeze:userに変更することでした。そして、それはすべてのファイルです。このように私は押していた権利を変更します。

サーバーがなくなり、適切な権限設定が再確立​​され、すべてが完全に機能します。

使った

chmod -R g+ws *
chown -R <myuser>:<mygroup> *

myuserおよびmygroupのオフコースは、システムの適切な設定に置き換える必要があります。git:gitまたはgituser:gituserまたはあなたが好きな他の何かを試してください。、


1

リポジトリを確認してください:$ git remote -v

origin  ssh://git@example.com:2283/srv/git/repo.git (fetch)
origin  ssh://git@example.com:2283/srv/git/repo.git (push)

ここに 'git @'サブストリングがあることに注意してください。これは、リモートサーバーでユーザー名 'git'として認証するようにgitに指示します。この行を省略すると、gitは別のユーザー名で認証されるため、このエラーが発生します。


1

私の場合、私のマシンとgit仮想サーバーの間に統合された認証(ドメイン内+ ADのようなサービスなど)がありませんでした。したがって、gitユーザーとグループは仮想サーバーに対してローカルです。私の場合、リモートユーザー(リモートサーバーへのログインに使用)がリモートgitグループに追加されていません。

ssh root@<remote_git_server>
usermod -G <remote_git_group> <your_remote_user>

その後、上記の投稿で説明されているように権限を確認します...


1

sudo git push -u origin --allを試しましたか?場合によっては、この問題を回避するために必要なことはそれだけです。それはあなたにあなたのマシンにログインさせることができるものである管理システムのパスワードを尋ねます-そしてそれはあなたがプッシュする必要があるものです-もしそうならそれをコミットします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.