跨系统SMB共享Git仓库提交报错问题求助
环境与需求
- 运行环境:VMware虚拟机内的Fedora Core 4系统,通过SMB1协议共享文件夹至Win11主机
- 操作需求:在FC4中编辑文件,通过Win11端Git提交代码(FC4因SSL版本过旧无法直接推送至远程仓库)
报错详情
1. 所有权验证错误
fatal: detected dubious ownership in repository at '//192.168.57.128/work/'
'//192.168.57.128/work/' is owned by:
'S-1-5-21-1030830248-2715341047-1655746900-2006'
but the current user is:
'S-1-5-21-624182484-2203949050-1231800916-1001'
系统提示执行命令:git config --global --add safe.directory '%(prefix)///192.168.57.128/work/'
2. 添加安全目录后报错
warning: in the working copy of 'transfer-test.txt', LF will be replaced by CRLF the next time Git touches it
Rename from '.git/objects/45/tmp_obj_G4Fewr' to '.git/objects/45/b921b0f124da3f73017c56757858cdd6f1fa4a' failed. Should I try again? (y/n)
附加问题
FC4内文件权限为r-xr--r--,但Samba共享已配置create mask = 0775,权限未生效。
解决方法
1. 处理所有权验证错误
直接执行系统提示的命令即可:
git config --global --add safe.directory '%(prefix)///192.168.57.128/work/'
若后续有多个SMB共享仓库需要处理,可使用通配符批量授权:
git config --global --add safe.directory '%(prefix)//*/*'
2. 消除换行符警告
Win11的Git默认会自动转换LF换行符为CRLF,可通过配置关闭该行为:
# 全局关闭自动换行转换(适用于所有仓库) git config --global core.autocrlf false # 仅针对当前共享仓库配置 git config core.autocrlf false
若需保留LF格式并仅做格式检查,可配置:
git config core.autocrlf input
3. 解决文件重命名失败问题
该问题由SMB1协议的文件锁定机制导致,可通过以下方式解决:
- 优先升级SMB版本:若FC4可编译安装新版本Samba,升级至SMB2/3,其文件处理机制更稳定,可避免锁定问题。
- 调整Samba配置:在FC4的
/etc/samba/smb.conf中添加以下参数,关闭文件锁定:
修改后重启Samba服务:oplocks = no level2 oplocks = no strict locking = noservice smb restart - 本地克隆仓库替代:在Win11本地克隆远程仓库,编辑文件后复制至FC4共享目录,再通过本地仓库提交代码,绕过SMB共享的文件操作限制。
4. 修复Samba权限不生效问题
create mask仅控制新创建文件的权限,需结合以下配置确保权限生效:
- 在FC4中递归修改共享目录的基础权限:
chmod -R 0775 /path/to/work - 在
smb.conf的共享配置段中补充以下参数:create mask = 0775 force create mode = 0775 directory mask = 0775 force directory mode = 0775 - 重启Samba服务后,新创建的文件和目录将应用正确权限。
内容的提问来源于stack exchange,提问作者Lukasz Pomianowski

