我正在使用 Git,并观察到以下奇怪现象:未更改的文件显示为被重命名。前任:
rename from path/to/file/filename.txt
rename to path/to/file/FILENA~1.txt
另一个例子:
rename from another/path/file.longext
rename to another/path/FILE~2.LON
最后一个例子:
rename from folder/path/file.csv
rename to folder/PATH~2/file.csv
我只是在查看 repo 并得到 nerd sniped由于 Windows 和 Linux 之间的行为差异。
git repo 位于 NFS 网络驱动器上,并安装在 Linux (CentOS) VM 和 Windows 7 VM 中。每个 VM 都有自己的 Git 安装。在 Linux 上,Git 没有显示任何变化。在 Windows 7 上,Git 显示 >800 项更改。大多数更改与上面的示例类似。经过进一步调查,我发现 repo 中有多个拼写相同但大小写不同的文件/文件夹。查看最后一个示例的 Windows,我在目录
folder
中看到了这个。 :X:\nfs_mount\repo\folder>dir
Volume in drive X is name
Volume Serial Number is XXXX-XXXX
Directory of X:\nfs_mount\repo\folder
xx/xx/xxxx xx:xx AM <DIR> .
xx/xx/xxxx xx:xx AM <DIR> ..
xx/xx/xxxx xx:xx AM <DIR> PATH
xx/xx/xxxx xx:xx AM <DIR> PATH~1
这就是我在 Linux 相同位置看到的内容:
fqdn.domain.com:/some/location/repo/folder$ ls -l
total xx
drwxr-xr-x 3 username compname 4096 XXX xx xx:xx path/
drwxr-xr-x 3 username compname 4096 XXX xx xx:xx PATH/
我的问题是名称拼写相同但大小写不同的文件夹。鉴于这是一个大型仓库,这个问题在不同位置有 400 多个表现形式,我不能(不允许)更改所有这些位置,有没有办法让 Windows 上的 Git 意识到这些不是实际变化?我知道重命名 Linux 上的所有内容可以解决此问题,但我无法使用该解决方案。
我正在寻找可以更改的 git 配置设置或 Windows 设置。更改必须是我可以应用于我的本地 repo/VM 的东西,并且不会影响远程 repo 或以任何方式更改 repo。 Windows 7 上的 git 版本是
git version 2.13.2.windows.1
, 使用 Git 扩展安装。
最佳答案
这是一种不寻常的情况:它被 checkout 到 Linux 区分大小写的文件系统,然后以某种奇怪的方式实时映射到 Windows 文件系统。我不确定您是否可以在远程 checkout 时做很多事情。它与 Linux 共享索引文件这一事实也很复杂,因此 Windows 意识过分可能会破坏对 Linux 端存储库的访问。
您可以做的是在本地克隆它,然后git应该能够处理具有不同情况的目录:
git clone -s REMOTE_LOCATION LOCAL_LOCATION
-s 标志可以让您避免复制所有 git 数据。然后你可以使用数据,或者编辑一些东西,提交和推回。最好通过 Linux 工具对工作树文件进行修改。
PS:在仅支持 Windows 的此类存储库中 checkout ,我已经检查过:
git ls-tree -r HEAD
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 Dir/file2
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 dir/file
使用单个“dir”子目录正确 checkout ,git status 没有变化
关于git - 混淆 Git 的 Windows 短名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49240517/