Visual Studio 2019克隆本地Ubuntu服务器Git仓库报错将文件当目录
根因说明
该错误由两类问题共同触发:一是服务端Git仓库存在推送残留的临时incoming-*目录,二是Windows端通过SMB协议访问Linux文件系统时,Git出现路径解析异常,将符合哈希命名规则的普通文件误识别为objects下的二级哈希目录执行遍历操作。
解决步骤
- 先在Ubuntu服务端操作,进入故障仓库的根目录,执行
git fsck --full命令,先确认仓库整体完整性,排除object损坏问题。 - 直接删除objects目录下所有
incoming-前缀的临时目录,这类目录是Git接收用户推送时生成的临时缓存,正常推送完成后会自动删除,残留后会干扰目录遍历逻辑:
rm -rf objects/incoming-*
- 检查报错提示的异常文件权限,确认Git运行用户有可读权限,执行
git hash-object objects/47/c4f1223ef91fff4cf45f549beff2fff5656fad校验文件哈希,输出结果需要和47c4f1223ef91fff4cf45f549beff2fff5656fad完全一致,不一致说明该object损坏,可以从其他持有该仓库完整副本的设备拷贝对应object替换即可。 - 优先替换远程仓库访问协议,不要直接使用SMB的UNC路径作为远程地址,改成SSH协议访问,完全规避跨平台文件系统解析兼容性问题:将VS2019内的远程仓库地址从
\\GitServer\Repo\ProjectName修改为ssh://<Ubuntu服务端用户名>@<服务器IP>/<仓库在Ubuntu上的绝对路径>/ProjectName。 - 如果必须保留SMB访问方式,升级VS2019内置的Git版本到最新正式版,旧版本Git针对Windows UNC路径的遍历存在已知缺陷,升级后可解决大部分路径识别问题。
内容的提问来源于stack exchange,提问作者zero_z77
相关产品推荐
相关产品推荐

