【问题标题】:Windows Short Names Confusing Git混淆 Git 的 Windows 短名称
【发布时间】: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


【解决方案1】:

这是一种不寻常的情况:它被检出到 Linux 区分大小写的文件系统,然后以某种奇怪的方式实时映射到 Windows 文件系统。我不确定您是否可以在远程结账时做很多事情。它与 Linux 共享索引文件这一事实也很复杂,因此 Windows 意识过分可能会破坏对 Linux 端存储库的访问。

你可以做的是在本地克隆它,然后git应该能够处理不同情况的目录:

git clone -s REMOTE_LOCATION LOCAL_LOCATION

-s 标志可以让您避免复制所有 git 数据。然后你可以使用数据,或者编辑一些东西,提交和推回。最好通过Linux工具来修改工作树文件。

PS:仅在 Windows 上支持此类存储库的签出,我已经检查过:

git ls-tree -r HEAD
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    Dir/file2
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    dir/file

这是用单个“dir”子目录正确签出的,git状态没有变化

【讨论】:

    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-04
    • 2010-09-27
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多