git - 混淆 Git 的 Windows 短名称

标签 git configuration windows-7 centos naming

我正在使用 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/

相关文章:

git - 如何删除 Git 中的重复文件跟踪

git - 恢复已添加但未提交的文件

c# - 在配置部分中创建动态键值对

configuration - 如何在一项托管服务中创建多个使用 https 的 Web 角色

windows-7 - powershell 作为 gvim(vim) :shell

git - 为什么 git-pull 会因信号 13 而失败?

git - golang中的版本控制第三方包

mysql - 在my.ini/my.cnf中使用环境变量

c# - 如何设置 Windows 服务的权限

c# - WPF WebBrowser C# Windows 不会旋转渲染