在过去几天我尝试制作git status或git pull时,我一直有这个问题。存储库托管在Bitbucket上。
尝试了几项工作(在stackoverflow上有一些与此相关的帖子,但它们不起作用)。
问题在于:
user@Host:/repo/$ git status fatal: index file open failed: Permission denied fatal: git status --porcelain failed
如果我做“git pull”:
user@Host:/repo/$ git pull remote: Counting objects: 77, done. remote: Compressing objects: 100% (30/30), done. remote: Total 56 (delta 37), reused 41 (delta 22) error: insufficient permission for adding an object to repository database .git/objects fatal: failed to write object fatal: unpack-objects failed
我仔细检查了本地权限,一切似乎都没问题。我有权使用所有文件。
注意:
如果我使用“sudo”,一切似乎都是常规工作,但我在该部署机器上没有root用户的任何SSH凭据。这让我觉得这是一个权限问题(正如错误所解释的),但是:它可能是什么,如果我是所有文件的所有者,包括.git /
中的文件提前致谢!
答案 0 :(得分:31)
运行fatal: index file open failed: Permission denied
时出现同样的错误git status
,我检查了.git/index
$ ls -al .git/index
令我惊讶的是,它是
---------- 1 Kjuly staff 768248 Sep 2 11:07 .git/index
我不知道为什么&它是如何变化的。无论如何,在我通过
将其权限更改回644
之后
$ chmod 644 .git/index
git status
有效。
答案 1 :(得分:5)
确保.git目录及其文件/子目录由用户拥有和写入。这听起来好像存储库是在不同的用户帐户下克隆的,或者是root用户(例如通过sudo
)。
托管存储库的远程位置无关紧要,git status仅访问本地存储库。
答案 2 :(得分:1)
我遇到了同样的问题,并且想知道可能是什么原因..环顾四周,以为我在做什么,什么在接触文件系统和工作目录-我怀疑文件是由某个人打开的。具有一些锁的IDE,当我在终端git中执行合并和更改分支时。关闭IDE,关闭外壳,git pull正常,没有错误消息。我在系统中没有用户更改,因此我认为文件锁或IDE在后台为git repo所做的“为我”所做的事情是原因。希望这可以对某人有所帮助。如果您遇到相同的问题并想深入探讨(而不仅仅是解决问题),请问自己“谁/什么人可能接触并更改我的.git和工作目录的文件所有权”?就我而言,犯罪嫌疑人是Microsoft Visual Studio。我认为远程回购类型的调查和操作只是红鲱鱼和伤口敷料(或核选择),没有解决问题的症结所在。
答案 3 :(得分: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