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はすべて正しいです。
これは何かおかしいバグですか?
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 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
_
上記のコマンドは、エラーが発生したユーザーと同じユーザーで実行してください。
chown
ingおよびchmod
ingしてみてください。Visual Studioまたはmdfファイルを生成している同様のものを使用している場合は、VSを閉じてgitコマンドを再試行してください。今回は動作するはずです。
常に閉じて再度開くように保存するには、プロジェクトルートの.gitignoreファイルに参照を追加する必要があります。たとえば、問題の原因となっているデータベースの場合、次を追加します。
# SQL Server files
*.mdf
*.ldf
/opt/www/.git/objects/3f
に書き込む権限がありません。
最も速い解決策は、Sudo
コマンドを使用して、root権限でコマンドを実行することです。
Sudo <Your git command>
私のためにそれを解決しました。
Visual Studio(またはUnity)を閉じて、それらのファイルを再度追加してみてください。
おそらく現在のユーザー以外のユーザーが所有するファイルまたはディレクトリを作成する外部プロセスが原因で、gitリポジトリで何かがおかしくなっています。
このエラーはDockerを使用する場合によく発生し、docker-compose.ymlファイルのサービスには、ローカルマシンユーザーとは異なるユーザーを使用して作成されたローカルにマウントされたボリュームがあります。
このエラーが初めて発生した場合は、作業ディレクトリで以下を実行して、ファイルとフォルダーの所有権をログインユーザーに戻します。
Sudo chown -R ${USER}:${USER} .
この問題に遭遇したのがこれが初めてではない場合、つまり、別のユーザーが所有するファイルとフォルダーを既にコミットおよびプッシュしている場合、上記だけでは状況を修正できず、上記のコマンドを実行できません-次の指示を実行する必要があります。
断然、最速の修正は、gitリポジトリを保持するルートプロジェクトディレクトリから次を実行することです。
Sudo chown -R ${USER}:${USER} .git/objects
すべてが修正されたことをテストするには、次を実行します。
git add .
すぐに実行します:
git status
これ以上テストする必要はなく、すべてがgitリポジトリに追加されていることがわかります。
権限がroot:git 770であったときに、Originのベアリポジトリでこの問題が発生していました。ユーザーがgitグループに属していても、明らかに771に変更する必要がありました。おそらくgitはaclに対応していないか、セカンダリグループとの互換性がないと思われます。この場合、gitグループは私のセカンダリグループの1つでした。