仅对于一个文件,我收到以下错误:
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 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)
请务必在遇到错误的同一用户上运行上述命令.
chown
和chmod
对象目录.只需关闭Visual Studio(或Unity),然后尝试再次添加这些文件。
您无权写入/opt/www/.git/objects/3f
.
最快的解决方案是使用该sudo
命令以root权限执行命令.
sudo <Your git command>
为我解决了它.
您的 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 存储库中,而无需进一步测试/摆弄任何东西。