【问题标题】:Working in git with directories with the same name but different case in Windows在 git 中使用 Windows 中具有相同名称但大小写不同的目录
【发布时间】:2015-03-01 04:50:25
【问题描述】:

我想从 Windows 中的 git repo 中提取,它有两个目录,名为 Foofoo。两个文件夹的内容不同。

由于 Windows 不区分大小写并且不允许文件夹名称相同但大小写不同,我该如何推送到 git 存储库?

【问题讨论】:

  • 不知道它在实践中的效果如何,不介意尝试,but there's this。 NTFS 本身在区分大小写的情况下工作得很好,但所有 Windows 都默认覆盖它。

标签: windows git github


【解决方案1】:

简答:你不能轻易做到这一点。

默认情况下,这是 Windows 子系统的限制。除非您使用较低级别的系统调用,否则 Windows 不能在不同的大小写之间有所不同;因此即使 Git 能够跟踪差异,它也无法将这些差异传达给文件系统。

正如phuclv 在 cmets 中指出的那样,可以将 Windows 内核重新配置为区分大小写。在 Windows 10 中,这甚至可以工作 for individual folders,因此您可以使用它在需要的地方添加兼容性。但是,每个文件夹的大小写敏感性不会被继承,因此您需要为 Git 创建的文件夹手动更改此设置,这可能会有点麻烦,这主要是一种解决方法。

相反,您可以使the whole file 系统区分大小写,但这可能会产生额外的影响,所以如果您想这样做,请小心。

另外请注意,即使在较低级别支持区分大小写的内容,大多数 Windows 应用程序(包括内置 Windows 工具)也可能无法使用此功能。因此,这只允许您通过某些工具使用这些文件。例如,我的猜测是大多数基于 GUI 的 Git 工具根本无法在这里工作。

如果您不想进行这些修改,那么您可能还可以创建部分提交,您只需将文件添加到正确的文件夹(您需要在中间重命名以获取不同的大小写)。但这将是非常不切实际的。

在我看来,最好的解决方案是简单地避免在名称冲突的文件夹中使用多个文件。即使在区分大小写的系统上,这只会让事情变得更加混乱。通过完全避免这种情况,您还可以让所有其他开发人员更轻松地与项目进行交互。

【讨论】:

【解决方案2】:

作为 poke 回答的后续行动,您需要将这些目录拆分为不同的名称,或者将它们正确地合并为一个具有相同名称的目录,这当然取决于您的需要。它们不能有相同的名称,并且不能在 Windows 中运行(无论如何以清晰明了的方式)。

我不小心落到了同一条船上。我不知道怎么做,因为我一直在使用 Windows,但是在某些时候我更改了 repo 目录中的大小写,一些文件最终保留在一个具有“旧”名称的目录中,一些文件与“新”名称。在我的 Windows 机器上,它们都使用了新名称,但是当我将存储库拉入 Linux 时发现了这个问题,并在查看我的 Assembla 存储库时确认了拆分。

为了解决这个问题,我首先将 克隆到我的 Windows 机器上的一个单独位置。这样做,所有文件又在一个目录中,因为显然这两个目录刚刚合并。然后我将该问题目录重命名为“temp”(使用 TortoiseGit “rename”操作)。然后,我将 repo 克隆到另一个位置。那时,这两个目录实际上在 Windows 中是分开的。我有一个“临时”,加上带有“旧”名称的目录。

因为我确实希望它们在一个目录中(在所有平台上!),我将文件从旧命名目录移到“temp”,然后删除“旧”目录。接下来,我将 temp (再次使用 TortoiseGit “重命名”操作)重命名为我想要的名称,再次提交并推送。最后,我将更改提取到我的原始存储库(我的 linux 存储库)中,并查看了 Assembla。一切终于达成一致,所以我删除了那些临时克隆并收工。

【讨论】:

猜你喜欢
  • 2012-01-26
  • 1970-01-01
  • 2023-03-14
  • 2022-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 2018-04-23
相关资源
最近更新 更多