web-dev-qa-db-ja.com

git:ファイルをインデックス化できません-許可が拒否されました

1つのファイルに対してのみ、次のエラーが表示されます。

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied

error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database
fatal: unable to index file wp/wp-admin/css/theme-install.dev.css

問題のファイル、。git objectsディレクトリ、および。git自体のパーミッションを確認しました。これ以外のファイルを追加できます。私はできた stat/r/w/touchファイル、およびタッチは助けにはなりませんでした。 permissionsはすべて正しいです。

これは何かおかしいバグですか?

23
h4xnoodle

Gitのソースコード(_sha1_file.c_、関数move_temp_to_file())を見ると、Gitは_/opt/www/.git/objects/3f/tmp_obj_XXXXXX_(XXXXXXは6つのランダムな文字)という名前の一時ファイルの名前を_/opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47_。これは、_/opt/www/.git/objects/3f_内のファイルを削除する権限がない場合に発生する可能性があります。

試してみたいこと:

  • 複数のユーザーがGitリポジトリにアクセスする場合、_git config core.sharedRepository 0664_(詳細は_git help config_を参照)のようなものを実行して、新しく作成されたディレクトリとファイルがリポジトリのすべてのユーザーに適切な権限を持っていることを確認する必要があります。
  • _rm -f /opt/www/.git/objects/3f/tmp_obj_*_を実行してみて、問題が解決するかどうかを確認してください。
  • 以下を実行して、Gitの外部で問題を再現できるかどうかを確認します。

    _mkdir -p /opt/www/.git/objects/3f
    cd /opt/www/.git/objects/3f
    rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47
    echo "testing" >tmp_obj_abcdefg
    mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47
    rm -f tmp_obj_abcdefg
    _

    上記のコマンドは、エラーが発生したユーザーと同じユーザーで実行してください。

  • オブジェクトディレクトリを再帰的にchowningおよびchmodingしてみてください。
15
Richard Hansen

Visual Studioまたはmdfファイルを生成している同様のものを使用している場合は、VSを閉じてgitコマンドを再試行してください。今回は動作するはずです。

常に閉じて再度開くように保存するには、プロジェクトルートの.gitignoreファイルに参照を追加する必要があります。たとえば、問題の原因となっているデータベースの場合、次を追加します。

# SQL Server files
*.mdf
*.ldf
53
ShrapNull

/opt/www/.git/objects/3fに書き込む権限がありません。

最も速い解決策は、Sudoコマンドを使用して、root権限でコマンドを実行することです。

Sudo <Your git command>

私のためにそれを解決しました。

5
william.eyidi

Visual Studio(またはUnity)を閉じて、それらのファイルを再度追加してみてください。

4
Yar

おそらく現在のユーザー以外のユーザーが所有するファイルまたはディレクトリを作成する外部プロセスが原因で、gitリポジトリで何かがおかしくなっています。

このエラーはDockerを使用する場合によく発生し、docker-compose.ymlファイルのサービスには、ローカルマシンユーザーとは異なるユーザーを使用して作成されたローカルにマウントされたボリュームがあります。

このエラーが初めて発生した場合は、作業ディレクトリで以下を実行して、ファイルとフォルダーの所有権をログインユーザーに戻します。

Sudo chown -R ${USER}:${USER} .

この問題に遭遇したのがこれが初めてではない場合、つまり、別のユーザーが所有するファイルとフォルダーを既にコミットおよびプッシュしている場合、上記だけでは状況を修正できず、上記のコマンドを実行できません-次の指示を実行する必要があります。

断然、最速の修正は、gitリポジトリを保持するルートプロジェクトディレクトリから次を実行することです。

Sudo chown -R ${USER}:${USER} .git/objects

すべてが修正されたことをテストするには、次を実行します。

git add .

すぐに実行します:

git status

これ以上テストする必要はなく、すべてがgitリポジトリに追加されていることがわかります。

1
Mat

権限がroot:git 770であったときに、Originのベアリポジトリでこの問題が発生していました。ユーザーがgitグループに属していても、明らかに771に変更する必要がありました。おそらくgitはaclに対応していないか、セカンダリグループとの互換性がないと思われます。この場合、gitグループは私のセカンダリグループの1つでした。

0
RedScourge