31

在过去几天尝试制作 git status 或 git pull 时,我一直遇到这个问题。该存储库托管在 Bitbucket 上。

尝试了几件事来完成这项工作(在stackoverflow上有一些与此相关的帖子,但他们没有工作)。

这是问题:

user@Host:/repo/$ git status
致命:索引文件打开失败:权限被拒绝
致命:git status --porcelain 失败

如果我执行“git pull”:

user@Host:/repo/$ git pull
远程:计数对象:77,完成。
远程:压缩对象:100% (30/30),完成。
远程:总共 56 个(增量 37),重复使用 41 个(增量 22)
错误:将对象添加到存储库数据库 .git/objects 的权限不足

致命:无法写入对象
致命:解包对象失败

我仔细检查了本地权限,一切似乎都很好。我有权访问所有文件。

笔记:

如果我使用“sudo”,一切似乎都正常工作,但是我在该部署机器上没有任何用于 root 的 SSH 凭据。它让我认为这是权限问题(正如错误所解释的那样),但是:如果我是所有文件的所有者,包括 .git/ 中的文件,它可能是什么

提前致谢!

4

4 回答 4

45

fatal: index file open failed: Permission denied通过 run得到了同样的错误git status,我检查.git/index

$ ls -al .git/index

令我惊讶的是,它是

----------  1 Kjuly  staff  768248 Sep  2 11:07 .git/index

我不知道为什么以及如何改变。无论如何,在我将其权限更改回644by

$ chmod 644 .git/index

git status作品。

于 2013-09-02T03:56:16.097 回答
6

确保 .git 目录及其文件/子目录由您的用户拥有和可写。这听起来像是存储库被克隆在不同的用户帐户下或作为 root 用户(例如通过sudo)。

存储库的远程托管在哪里无关紧要, git status 只访问本地存储库。

于 2013-03-06T20:00:49.897 回答
4

我有同样的问题,想知道可能是什么原因.. 环顾四周,想想我在做什么,是什么触及了文件系统和工作目录——我怀疑这些文件是由 IDE 打开的,带有一些锁,当我在终端 git 中执行合并和更改分支时。关闭 IDE,关闭 shell,git pull 正常,没有错误消息。我在系统中没有用户更改,所以我认为文件锁定或 IDE 在幕后使用 git repo “为我”做的事情是原因。希望这对某人有所帮助。如果您遇到同样的问题并想深入了解它(不仅仅是修复它)问自己“谁/什么可能会触及和更改我的 .git 和工作目录的文件所有权”?就我而言,嫌疑人是 Microsoft Visual Studio。

于 2020-07-06T14:41:53.310 回答
0

今天我在使用 BitBucket 时遇到了同样的问题。这是对我有用的解决方法:

git remote set-url origin https://_username_@bitbucket.org/_my_/_repo_.git
git pull
git push
git remote set-url origin git@bitbucket.org:_my_/_repo_.git
于 2015-02-25T21:48:03.733 回答