Gitのアクセス許可の問題


2

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

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

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

誰か提案がありますか?


1
これは、ローカルマシンでの作業中に発生しますか?リモートにプッシュすると発生しますか?他の人と共有していますか?複数のアカウントで同じローカルgitリポジトリを使用していますか?
UTF-8

ローカルマシンでコミットしようとしています。私は、同じローカルレポで1つのアカウントのみを使用する
デヴィッド・

回答:


3

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

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

sudo chown -R david .git
sudo chgrp -R david .git

これにより、あなたが所有者になり、あなたのグループが.gitフォルダ内のすべてのファイルのグループになります。davidもちろん、ユーザー名がであると仮定します。そうでない場合は、変更します。グループの名前はユーザーと同じです。これをレポ全体に適用する場合は.git.(1つのピリオド)に置き換えてください。

これで問題が解決しない場合は、次の行を実行します。

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/*

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


2
うーん。2番目のコマンドは(少なくともu)である必要がu+rwXあります。これにより、フォルダー内の実行可能スクリプト(存在する場合)は実行可能状態を保持します。
ムル16

1
コマンドは.gitフォルダーとそのコンテンツの権限のみを変更し、OPが動作するファイルは変更しません。フックはの唯一の実行可能ファイルであり.git、OPはおそらく何も使用しません。サンプルフックが実行可能かどうかは、とにかく実行されないため重要ではありません。を使用u+rwXすると、ファイルに誤って実行可能ビットが設定されたままになります。
UTF-8

1
ああ、しかし、私たちはOPのためだけに答えを投稿しません。警告は、将来の訪問者に役立ちます。
ムル16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.