Ubuntu VM访问Windows SMB共享Git仓库时push/pull报错如何解决
解决方案
核心报错根因
你遇到的推送失败本质是三个问题:
- CIFS/SMB挂载时没有配置正确的Linux权限映射,当前Ubuntu用户对共享目录没有Git操作需要的临时文件创建、写入权限
- 直接把带工作区的普通Git目录作为远程共享仓库,不符合Git推送的设计规范
- 早期使用gvfs用户态挂载SMB,对Git需要的文件锁、原子操作支持不完整
具体修复步骤
重新配置CIFS挂载参数
先卸载现有挂载:sudo umount /mnt/cifs执行带权限映射的挂载命令,替换对应占位符为你实际的共享配置:
sudo mount -t cifs //Windows服务器地址/共享目录名 /mnt/cifs -o username=Windows共享账号,password=Windows共享密码,uid=$(id -u),gid=$(id -g),file_mode=0775,dir_mode=0775,nounix,noserverino参数说明:
uid=$(id -u)、gid=$(id -g):将挂载目录的所有者映射为当前登录的Ubuntu用户,避免root用户独占权限file_mode=0775、dir_mode=0775:给所有用户开放读写执行权限,适配共享场景nounix、noserverino:禁用SMB的Unix扩展、避免服务端inode号冲突,解决Git文件识别异常问题
创建裸仓库作为共享远端
Git不支持直接推送到带工作区的普通仓库,需要创建专门用于共享的裸仓库:cd /mnt/cifs git init --bare demo.git修改本地仓库的远程地址
进入本地开发的仓库目录,执行:git remote set-url origin /mnt/cifs/demo.git测试推送
执行推送命令即可正常提交:git push origin master
其他报错说明
你执行git push origin/master报错是命令格式错误:origin/master是本地的远程追踪分支名称,不是远程仓库名,正确的推送语法为git push <远程仓库名> <分支名>。
内容的提问来源于stack exchange,提问作者JWorkin
相关产品推荐
相关产品推荐

