【问题标题】:Can I make Mercurial case-sensitive on file names on NTFS?我可以让 Mercurial 对 NTFS 上的文件名区分大小写吗?
【发布时间】:2018-04-30 23:40:24
【问题描述】:

有没有办法让 Mercurial 将 foo.txtFoo.txt 视为不同? 因此,如果我将 foo.txt 重命名为 Foo.txt,它会看到此更改并允许将其提交到存储库?

目前,如果我重命名文件,Mercurial 看不到任何更改,也无法提交更改(除了变通方法,例如先重命名为 foo_.txt)。

背景是 - 我有一堆 XML 文件,这些文件被处理以生成代码并将其编译为 DLL。文件名和大小写很重要,因为它们成为目标代码中的类名。


附加问题:如果这不可能,在 Git 上会有什么不同吗?

【问题讨论】:

  • 默认情况下,Windows 上的 Git 也不会发现此更改,如果您将 core.ignorecase 配置为 false,那么当您在不使用 git mv 的情况下重命名文件时,它会变得非常混乱。基本上它会看到一个新文件,因为 git 不知道 Test.txt 但 test.txt 是,它看到旧文件是因为 Windows 说 test.txt 存在并且具有与存储库中相同的元数据。基本上,如果您重命名文件更改大小写,然后添加并提交它,存储库现在包含 2 个不同大小写的文件,但磁盘上只有一个文件。
  • 您能否尝试让 mercurial 为您重命名文件,而不是发现您使用 Windows 对其进行了重命名?看看这有什么不同?
  • @LasseVågsætherKarlsen 是的,它确实有所作为,它以这种方式正确运行,就像正常重命名一样。我还测试了 repo 的另一个克隆将在更新到此版本时将文件物理重命名。这部分是好消息。但对我们来说仍然是个问题,因为这些 XML 文件来自不同的开发组,我们只需要将它们放在以前的版本之上,让 Mercurial 发现这些变化。所以似乎发现更改失败了 - 有没有办法重新配置它?我使用 TortoiseHg - 这可能是 Tortoise 的问题吗?
  • 由于 Windows 不区分大小写,因此使用文件名大小写的设计决定听起来不是一个好的决定。而是将类名放在 XML 数据中。
  • 感谢 cmets 伙计们。但我对此很不高兴:/

标签: git mercurial


【解决方案1】:

我没有为 Mercurial 测试过这个,但是有一些机制可以让 Windows 在某些情况下将 NTFS 文件系统操作为区分大小写。

https://superuser.com/questions/266110/how-do-you-make-windows-7-fully-case-sensitive-with-respect-to-the-filesystem

总结:

您可以将HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive 注册表值设置为0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-05
    • 2010-09-06
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 2014-11-08
    • 2012-02-03
    相关资源
    最近更新 更多