ある種のgit権限の問題があり、誰かが助けてくれることを望んでいます。私がコミットしようとするたびに、私は次を取得します:
error: insufficient permission for adding an object to repository database .git/objects
error: Error building trees
これを解決するためのいくつかの提案を見てきましたが、それらは基本的に沸騰して、.gitフォルダー内のアクセス権が壊れていないことを確認します。すべての権限を持っていることを確認しました。 git config core.sharedRepository
is true
の出力も確認しました。
誰か提案がありますか?
どういうわけか、許可を台無しにするか、所有者またはグループを混乱させます。後者はそれぞれユーザーまたはユーザーのグループでなければなりません。
リポジトリでターミナルを開くか、そこに移動します。次に、これらのコマンドを実行します。
Sudo chown -R david .git
Sudo chgrp -R david .git
これにより、.git
フォルダー内のすべてのファイルの所有者とグループが作成されます。もちろん、ユーザー名がdavid
であると仮定します。そうでない場合は、変更します。グループの名前はユーザーと同じです。これをリポジトリ全体に適用する場合は、.git
を.
(単一のピリオド)に置き換えてください。
これで問題が解決しない場合は、次の行を実行します。
find .git -type d -exec chmod 755 {} +
find .git -type f -exec chmod 644 {} +
最初の行はすべてのディレクトリに対する完全な権限を提供し、2番目の行は.git
フォルダー内のファイルの読み取りおよび書き込み権限を提供します。 find
は、アクセス権が正しく設定されるまで(完全に間違って設定されている場合)フォルダーに移動できないため、最初の行にエラーが出力されます。これが発生した場合は、エラーが出力されなくなるまで最初のコマンドを再度実行します(2番目のコマンドを実行する前に)。もちろん、最初のコマンドをroot
(Sudo find .git -type d -exec chmod 755 {} +
)として実行することで、これを回避できます。その後、いずれの場合でもエラーなしで最初から実行されます。
2番目のコマンドは、.git
フォルダー内のすべてのファイルを実行不能にします。これは、フックを使用しないという問題ではありません。もしそうなら、おそらく実行したい
chmod +x .git/hooks/*
その後、フックに実行ビットを戻します。それらを返さないと、フックは実行されなくなります。フックを使用しない場合、これを実行しても害はありません。