如何删除具有区分大小写名称的重复目录?

Posted

技术标签:

【中文标题】如何删除具有区分大小写名称的重复目录?【英文标题】:How to remove a duplicate directory with a case-sensitive name? 【发布时间】:2019-11-25 17:44:03 【问题描述】:

我在 Github 中有重复的目录(因情况而异)。似乎它们都被跟踪到我本地的单个目录。如何正确删除其中一个目录而不影响我的本地?

我采取的一般步骤 (IIRC):

    我有一个目录,比如说“MyDirectory”。 我将该目录中的一些代码推送到了 Github。 我将目录名称更改为“mydirectory”。 我意识到 github 默认情况下不区分大小写(我所有的代码更改都添加到 Github 的“MyDirectory”中),所以我运行了“git config core.ignorecase false”。 我重新推送了更改,这在 Github 中创建了一个新目录。 (此时,Github 有 2 个目录,一个名为 MyDirectory,另一个名为 mydirectory。我的本地只有 mydirectory。) 我想不出从 Github 中删除 MyDirectory 的好方法,所以我手动删除了其中的所有文件,并遵循 these steps。 现在,当我运行 git pull 时,它会从本地删除 mydirectory(我不想这样做。)

【问题讨论】:

几点澄清:1.“GitHub默认不区分大小写”不准确。问题在于操作系统的文件系统以及 git 如何与之交互,而不是 GitHub。 2.git不跟踪目录。它只跟踪文件的内容。因此,删除目录的唯一方法是删除该目录中的文件。 ***.com/questions/11183788/… 以及该页面的链接可能会有所帮助。 是的,你确实想要那个。复制所有文件,删除本地重复目录,拉取,现在一切都同步了。现在再次创建目录一次,然后将内容放入其中并推送。 不要做你在第 4 步中所做的事情。你的 Git 存储库中的 core.ignorecase 设置告诉你的 Git 如何你的计算机实际行为。改变它意味着你在对你的 Git 撒谎:它不会改变你的计算机的行为;它只会改变 Git 用来尝试处理您的计算机行为方式的策略,可能会使 Git 行为不佳。 @Code-Apprentice 感谢您的更正。看来我需要更多地了解 git 的工作原理。马特,这几乎就是我最终做的。谢谢。托雷克,我明白了。这与 Code-Apprentice 的回答一起解释了为什么远程更改会导致在 git pull 之后删除我的本地文件。我想我以后遇到这个问题时应该使用“git mv”。 【参考方案1】:

TLDR:不要设置core.ignorecase=false。这与您的操作系统实际执行的操作相反,并导致 git 行为异常。

我认为这里关于文件名、Git 和 GitHub 存在一些混淆。

    操作系统中的文件系统: Linux 和 Mac 使用区分大小写的文件名。 Windows 文件名不区分大小写。

    Git: Git 有一个名为 core.ignorecase 的配置,您可以对其进行设置。这用于通知 Git 你的操作系统的行为。如果您将其设置为与您的操作系统实际所做的相反,那么 Git 将以意想不到的方式运行。请注意,这不会修改底层文件系统的区分大小写。

    Git Hub:这是建立在 Git 之上的 Web 服务。对于本次讨论,这并不是一个真正的因素,因为文件名的大小写敏感性不在此级别进行管理。

此外,Git 只跟踪文件内容。它直接跟踪目录。从 Git 的版本控制中删除目录的唯一方法是从该目录中删除文件。

我知道这并不能直接回答您的问题,但我希望它能阐明这三个部分是如何导致该问题的。

【讨论】:

虽然这并没有像马特的解决方案那样解决我的问题,但它确实帮助我在未来发现问题。所以我很乐意接受这个答案。 @Azianese 好的,我在答案中添加了那部分。

以上是关于如何删除具有区分大小写名称的重复目录?的主要内容,如果未能解决你的问题,请参考以下文章

PHP 删除重复的单词(不区分大小写)

从熊猫数据框中删除重复行:不区分大小写的比较

Git 区分大小写

检查区分大小写的文件名 HFS

在 git 中使用 Windows 中具有相同名称但大小写不同的目录

使用 Spring CrudRepository 进行不区分大小写的查询