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

问题描述 投票:0回答:10

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

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
文件,但触摸没有帮助。 权限都是正确的。

这是一些疯狂的错误吗?

git indexing addition
10个回答
75
投票

如果您使用的是 Visual Studio 或类似的工具来生成 mdf 文件,只需关闭 VS 并再次重试 git 命令即可。这次应该可以了。

为了避免不断关闭和重新打开,您应该将引用添加到项目根目录中的 .gitignore 文件中。例如,如果是数据库导致问题,请添加以下内容:

# SQL Server files
*.mdf
*.ldf

20
投票

查看 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
    

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

  • 尝试递归地
    chown
    chmod
    对象目录。

19
投票

只需关闭 Visual Studio(或 Unity)并尝试再次添加这些文件。


10
投票

您没有权限写入

/opt/www/.git/objects/3f

最快的解决方案是使用

sudo
命令以 root 权限执行命令。

sudo <Your git command>

帮我解决了。


5
投票

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

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

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

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

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

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

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

要测试一切是否已修复,请执行以下命令:

git add .

快速执行:

git status

您将看到所有内容都已添加到 git 存储库中,无需进一步测试/摆弄任何内容。


3
投票
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 *”,不带引号 这对我自己有用


0
投票

当权限为 root:git 770 时,我在裸源存储库上遇到了这个问题,显然我必须将其更改为 771,即使我的用户位于 git 组中。我怀疑 git 可能不支持 acl,或者与辅助组不太兼容,因为在本例中 git 组是我的辅助组之一。


0
投票

我停止在 intelliJ(用于 Java 编程)中运行我的

Driver.main()
方法,并且能够使用
git add .
命令将所有文件添加到暂存区域。还可以尝试重新启动 intelliJ 或您用来编写代码的任何工具作为第二个选项。


0
投票

当我尝试将打开的文档文件推送到 GIT 中心时,就会发生这种情况。关闭后尝试同样的操作并成功推送。


0
投票

解决了。

  1. git config core.sharedRepository 0664
    (设置 git 以使用正确的共享权限管理文件。)

  2. 查找权限错误的现有文件和文件夹。在你的 git repo 主文件夹中:

    find .git -type d -not -user *youruser*

    sudo chown -R *youruser* .git

    sudo chmod -R ug+w .git

之后,所有文件都应获得正确的权限,并且将来的文件将由具有正确共享权限的 git 管理。我使用 WSL 和 Windows 文件夹,存储库是共享的。这个问题经常出现。

© www.soinside.com 2019 - 2024. All rights reserved.