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

h4x*_*dle 26 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
Run Code Online (Sandbox Code Playgroud)

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

这是一个疯狂的bug吗?

Shr*_*ull 55

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

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

# SQL Server files
*.mdf
*.ldf
Run Code Online (Sandbox Code Playgroud)


Ric*_*sen 15

看看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
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 尝试递归chownchmod对象目录.


Yar*_*Yar 6

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

  • 我已经关闭了我的angularJs应用程序正在运行且索引已解锁的nodeJs服务器。 (2认同)

wil*_*idi 5

您无权写入/opt/www/.git/objects/3f.

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

sudo <Your git command>

为我解决了它.


Mat*_*Mat 5

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

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

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

sudo chown -R ${USER}:${USER} .
Run Code Online (Sandbox Code Playgroud)

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

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

sudo chown -R ${USER}:${USER} .git/objects
Run Code Online (Sandbox Code Playgroud)

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

git add .
Run Code Online (Sandbox Code Playgroud)

紧接着执行:

git status
Run Code Online (Sandbox Code Playgroud)

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