git:无法索引文件 - 权限被拒绝

时间:2011-06-19 05:27:07

标签: git indexing add

仅对一个文件,我收到以下错误:

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied

error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database
fatal: unable to index file wp/wp-admin/css/theme-install.dev.css

我检查了相关文件的权限,相关的 .git 对象目录,以及 .git 本身。我可以添加除此之外的任何其他文件。我可以stat/r/w/touch文件,触摸没有帮助。 权限都是正确的。

这是一个疯狂的错误吗?

7 个答案:

答案 0 :(得分:49)

如果您正在使用visual studio或类似的生成mdf文件的东西,只需关闭VS&再次重试你的git命令。这次它应该有效。

保持不断关闭&重新打开时,应该在项目根目录中添加对.gitignore文件的引用。例如,如果它是导致问题的数据库,请添加以下内容:

# SQL Server files
*.mdf
*.ldf

答案 1 :(得分:14)

查看Git源代码(sha1_file.c,函数move_temp_to_file()),看起来Git无法重命名名为/opt/www/.git/objects/3f/tmp_obj_XXXXXX的临时文件(其中XXXXXX是随机的六个字符)到/opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47。如果您无权删除/opt/www/.git/objects/3f中的文件,则可能会发生这种情况。

有些事情要尝试:

  • 如果多个用户访问Git存储库,您可能需要运行类似git config core.sharedRepository 0664的内容(有关详细信息,请参阅git help config),以确保新创建的目录和文件对存储库的所有用户具有适当的权限
  • 尝试运行rm -f /opt/www/.git/objects/3f/tmp_obj_*并查看是否会导致问题消失。
  • 看看你是否可以通过执行以下操作在Git之外重现问题:

    mkdir -p /opt/www/.git/objects/3f
    cd /opt/www/.git/objects/3f
    rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47
    echo "testing" >tmp_obj_abcdefg
    mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47
    rm -f tmp_obj_abcdefg
    

    请务必让遇到错误的用户运行上述命令。

  • 尝试递归chownchmod对象目录。

答案 2 :(得分:5)

您无权使用/opt/www/.git/objects/3f撰写。

最快的解决方案是使用sudo命令以root权限执行命令。

sudo <Your git command>

为我解决了。

答案 3 :(得分:2)

只需关闭Visual Studio(或Unity),然后尝试再次添加这些文件即可。

答案 4 :(得分:1)

您的git存储库中出现了某些问题,这很可能是由外部进程创建的文件或目录(由当前用户以外的用户拥有)导致的。

使用Docker时此错误很常见,并且docker-compose.yml文件中的服务具有本地安装的卷,该卷是使用与本地计算机用户不同的用户创建的。

如果这是第一次发生此错误,请在工作目录上执行以下操作,将文件和文件夹的所有权更改回登录的用户:

sudo chown -R ${USER}:${USER} .

如果这不是您第一次遇到此问题,即您已经提交并推送了另一个用户所拥有的文件和文件夹,那么仅上述情况并不能纠正这种情况,并且无法执行上述命令-您需要执行以下说明。

到目前为止,最快的解决方法是从保存git存储库的根项目目录执行以下操作:

sudo chown -R ${USER}:${USER} .git/objects

要测试所有问题是否已修复,请执行以下操作:

git add .

快速执行:

git status

您将看到,所有内容都已添加到git存储库中,而无需进行任何测试/弄乱任何东西。

答案 5 :(得分:0)

当权限为root时,我在我的裸源存储库中遇到此问题:git 770,显然我必须将其更改为771,即使我的用户位于git组中。我怀疑git可能不是acl-aware,或者与辅助组不兼容,因为在这种情况下git组是我的次要组之一。

答案 6 :(得分:0)

error: open("3/BasicMVVM/.vs/BasicMVVM/v16/Server/sqlite3/db.lock"): Permission denied

错误:无法索引文件3 / BasicMVVM / .vs / BasicMVVM / v16 / Server / sqlite3 / db.lock 致命:添加文件失败

如果您遇到此类错误并且正在使用Visual Studio,请先关闭Visual Studio。 git bash并在适当的地方写上“ git add *”,不要用逗号隔开 它会为我自己工作