web-dev-qa-db-ja.com

git:権限の問題に関連するプッシュ(アンパッカーエラー)ができません

私はgitでプッシュしようとするとこの問題があります:

error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://<repo url>/<repo dir>
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to Push some refs to 'ssh://<repo url>/<repo dir>'

私はこれを時々散発的に持っていましたが、私たちは常に各ユーザーがレポに投入し、その中のすべてのファイルにグループ権限を設定することでそれを解決しなければなりませんでした

chmod -R g+w *

これは決して満足のいく解決策ではありませんでしたが、今では、仲間の1人が不在で、誰も彼のレポユーザーのパスワードを知らないので、私たちはお尻に噛みつきました。だから、私はそれを適切に解決しようとしています。

他のユーザーが所有するレポジトリを変更する変更をプッシュしようとすると、エラーが発生するようです(したがって、上記のグループ書き込みオプションを設定します)。私はこれについて少しグーグルで調べましたが、議論されているいくつかの解決策を見つけました(どちらもうまくいきませんでした)

1)リポジトリが共有されるグループが各ユーザーのプライマリグループであることを確認します(すでにそうだと思います:各ユーザーは1つのグループしか持っていないので、プライマリグループでなければなりませんか?)

2)git repo core.sharedRepository設定、詳細はこちら: Git:1台のコンピューターからプッシュできません これを変更しましたが、違いはありませんでした。実際に変更を有効にするために、設定または何かをリロードする必要がありますか?

これが私のレポ設定がatmのように見えるものです:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = all
[receive]
        denyNonFastForwards = True

アドバイスや提案に感謝します!最大

53
Max Williams

これを行う簡単な方法は、サーバーの「ハブ」リポジトリにプッシュするたびにchmodコマンドを実行する受信後スクリプトを追加することです。サーバーのgitフォルダー内のhooks/post-receiveに次の行を追加します。

chmod -Rf u+w /path/to/git/repo/objects
27
spadeworkers

私は2週間このエラーを抱えていましたが、ソリューションの大半は「chmod -R」を答えとして述べましたが、残念ながら私のgitリポジトリ(ローカル/リモート/共有-チームと)はすべてWindows OS上にありましたが、 chmod -Rvは、「rwxrwxrwx」に変更されたすべてのファイルを表示し、その後の「ls -l」は、すべてのファイルを「rwxr-xr-x」として表示し、エラーが繰り返されました。結局、Ariejan de Vroomによる このソリューション を見ました。それは機能し、私たちはみんな引っ張って押し戻すことができました。

ローカル(プッシュに問題があるローカル)とリモートリポジトリの両方で、次のコマンドを実行します。

$ git fsck
$ git Prune
$ git repack
$ git fsck

補足として、私はWindowsのネイティブファイルのアクセス許可/ ACLを使用してみましたが、問題のあるユーザーを管理者に昇格させましたが、どれも役に立たなかったようです。環境が重要であるかどうかはわかりませんが、問題のチームメンバーとリモート(Windows Server 2008 R2 Standard)、ローカル(Windows 7 VM)といった同様のセットアップを持つ人を助けるかもしれません。

22
Jason Robinson

許可エラーです。私にとって最も適切で安全な方法は、 ユーザーを補助グループに追加する そのレポでした。所有者(またはその逆):

groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
9
Alastair

他の誰かがこれに固執している場合:それは単に、あなたがプッシュしているレポの書き込み許可が間違っていることを意味します。行ってchmod -Rを実行し、gitサーバーにアクセスしているユーザーが書き込みアクセスできるようにします。

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

それはただ動作します。

6
sjas

私にとって、このエラーは、リモコンのスペースが足りないときに発生しました。

残りのエラーメッセージを読む必要がありました。

error: file write error (No space left on device)
fatal: unable to write sha1 file
error: unpack failed: unpack-objects abnormal exit
3
aradil

私はこの種のものを管理するためにgitosisを使用しています。 Gitosisには、すべてのリポジトリを所有する単一のユーザー(通常「git」と呼ばれます)があり、各リポジトリに対して公開キーベースのアクセス制御を使用します。設定に合わないかもしれませんが、おそらくチェックアウトする価値があります(しゃれはありません)。

3
Cameron Skinner

この問題は、再起動が必要なUbuntuのアップグレード後にも発生する可能性があります。

ファイル/var/run/reboot-requiredが存在するか、再起動を実行またはスケジュールします。

1
cmc

リモートgitolite-adminが壊れているか何かがおかしいと思って、私もこれに問題を抱えていました。

私のセットアップは、リモートのUbuntu 10サーバーとgitoliteを搭載したMac OS X(10.6.6)ラップトップです。

問題は、私のlocal gitolite-adminのチェックアウトにあることが判明しました。

「アンパック失敗」エラーにもかかわらず、問題はローカルにあることが判明しました。

私はこれをgitolite-admin2として再度チェックアウトし、変更を加えてプッシュすることでこれを理解しました。

出来上がり!出来た!

1
jpswain

それだけの価値があるのですが、私は自分のVPSで同じ問題を抱えていましたが、それはVPSのハードディスク容量が少ないことが原因でした。 df -hコマンドとVPSのハードディスクをクリーンアップした後。問題はなくなりました。

乾杯。

1
dariush

私にとっては権限の問題:

Gitサーバーで、repoディレクトリでこのコマンドを実行します

Sudo chmod -R 777 theDirectory/
0
MobileMon

私が働いている場所では、数年前からすべてのリポジトリでこのメソッドを問題なく使用しています(新しいリポジトリを作成してこの方法で設定するのを忘れた場合を除く)。

  1. 設定ファイルの「[core]」セクションで「sharedRepository = true」を設定します。
  2. リポジトリのグループIDを、プッシュを許可されているすべてのユーザーが共有するグループに変更します。

    chgrp -R shared_group /git/our_repos
    chmod -R g+w /git/our_repos
    
  3. リポジトリ内のすべてのディレクトリにsetgidビットを設定して、新しいファイル/ディレクトリが同じグループを保持するようにします。

    find /git/our_repos -type d -exec chmod g+s {} +
    
  4. リポジトリのpre-receiveフックに次の行を追加して、新しいファイルのアクセス許可でグループの読み取り/書き込みが許可されるようにします。

    umask 007
    
0

同様のエラーが発生していました。以下の解決方法をご覧ください。

私のディレクトリ構造:/opt/git/project.gitおよびgitユーザーはgit

$ cd /opt/git/project.git
$ Sudo chown -R git:git .

-Rオプションを指定したchownは、現在のディレクトリの所有権とグループを再帰的に変更します(上記のコマンドでgit:gitと入力したため)。リポジトリにプッシュするとgitはgitディレクトリ内の多くのファイルを変更するため、chown -Rが必要です。

0
Hrushikesh