web-dev-qa-db-ja.com

Gitのアクセス許可の問題

ある種のgit権限の問題があり、誰かが助けてくれることを望んでいます。私がコミットしようとするたびに、私は次を取得します:

error: insufficient permission for adding an object to repository database .git/objects
error: Error building trees

これを解決するためのいくつかの提案を見てきましたが、それらは基本的に沸騰して、.gitフォルダー内のアクセス権が壊れていないことを確認します。すべての権限を持っていることを確認しました。 git config core.sharedRepository is trueの出力も確認しました。

誰か提案がありますか?

2
David

どういうわけか、許可を台無しにするか、所有者またはグループを混乱させます。後者はそれぞれユーザーまたはユーザーのグループでなければなりません。

リポジトリでターミナルを開くか、そこに移動します。次に、これらのコマンドを実行します。

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番目のコマンドを実行する前に)。もちろん、最初のコマンドをrootSudo find .git -type d -exec chmod 755 {} +)として実行することで、これを回避できます。その後、いずれの場合でもエラーなしで最初から実行されます。

2番目のコマンドは、.gitフォルダー内のすべてのファイルを実行不能にします。これは、フックを使用しないという問題ではありません。もしそうなら、おそらく実行したい

chmod +x .git/hooks/*

その後、フックに実行ビットを戻します。それらを返さないと、フックは実行されなくなります。フックを使用しない場合、これを実行しても害はありません。

3
UTF-8