【发布时间】:2018-08-20 18:50:45
【问题描述】:
我正在使用 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 并通过 Windows 和 Linux 之间的行为差异得到nerd sniped。
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/
我的问题是名称拼写相同但大小写不同的文件夹。鉴于这是一个大型 repo,这个问题在不同位置有 400 多个表现形式,我不能(不允许)更改所有这些位置,有没有办法让 Windows 上的 Git 意识到这些不是实际变化?我知道重命名 Linux 上的所有内容可以解决此问题,但我无法使用该解决方案。
我正在寻找可以更改的 git 配置设置或 Windows 设置。更改必须是我可以应用于我的本地 repo/VM 的东西,并且不会影响远程 repo 或以任何方式更改 repo。 Windows 7 上的 git 版本是 git version 2.13.2.windows.1,使用 Git Extensions 安装。
【问题讨论】:
-
我避免使用 Windows 的原因有很多,这就是其中之一。 :-) 我怀疑 Git 本身有没有办法处理这个问题。您将需要某种较低级别的处理程序(在 Windows
PATH~1替换发生之前 / 下方)合成 Windows 可以处理的名称,或者在 Windows 中关闭大小写折叠的某种方式(如果可能的话)。 (它在 MacOS 上,但它是文件系统级别的设置。) -
@torek,我可以并且确实使用 Linux VM 作为与 Git 交互的主要方式。正如我所说,我看到了这个并且被书呆子狙击了,我所知道的唯一修复它的方法在这里不起作用。即使这是不可能的,我也会知道这是不可能的。
-
在 Git 中缺少的东西在这里有用的是名称映射器:某种说法 我知道文件系统声称该文件名为 A.EXT 但是请假装它被命名为 foo.longext。如果存在,您可以从中构建解决方案。
-
@torek,你是说 GDB 的路径替换之类的东西吗?那样就好了。在谷歌搜索时,我遇到了其他几个有类似问题的人,这帮助我弄清楚这里发生了什么。这些修复都是“更改回购”。但是,在谈论具有不同开发环境的大型团队时,这有其自身的问题。当 2 个人独立创建同一个文件时,我也偶然看到了这种情况。 Git 的替换功能需要允许“sub this for that 并默认为 this”。
-
您是否尝试将存储库克隆到本地 Windows 文件系统?它应该处理不区分大小写的问题。
标签: git configuration windows-7 centos naming