问题描述

情形一:git clone 后仅拉取 .git 文件夹

执行 git clone 命令后,目标文件夹中只有 .git 文件夹,其他文件未被拉取。

使用 git status -s 命令查看,所有文件均显示为已删除状态。

情形二:切换分支时报错

在执行 git checkout 切换分支时,出现如下错误,导致分支切换失败:

error: invalid path 'folder_1/....../name_1.txt'
error: invalid path 'folder_1/....../name_2.txt'
error: invalid path 'folder_1/....../name_3.txt'
error: invalid path 'folder_1/....../name_4.txt'

问题原因

上述问题通常是由于代码中包含 NTFS 文件系统不支持的文件名(如含有特殊字符或保留名称)。这些文件可能是在 macOS 或 Linux 系统下创建的,而 Windows 的 NTFS 文件系统对文件命名有更严格的限制。

Git 在 Windows 下默认启用了 NTFS 保护机制(core.protectNTFS 设置为 true),这会阻止包含不兼容文件名的文件被检出。

解决方法

可以通过关闭 Git 的 NTFS 保护机制来解决此问题。执行以下命令:

git config core.protectNTFS false
// 全局设置
git config --global core.protectNTFS false

该配置的含义如下:

如果设置为 true,则不允许检出可能与 NTFS 文件系统冲突的路径,例如与 8.3 “短”名称冲突的路径。默认情况下,在 Windows 上为 true,在其他系统上为 false。

关闭此保护后,再次执行 git checkout 命令。虽然仍会出现类似以下的错误提示,但其他文件将被成功拉取:

error: unable to create file folder_1/....../name_1.txt: No such file or directory
error: unable to create file folder_1/....../name_2.txt: No such file or directory
error: unable to create file folder_1/....../name_3.txt: No such file or directory
error: unable to create file folder_1/....../name_4.txt: No such file or directory