如何删除一个名称大小写敏感的重复目录?

4
我在Github上有重复的文件夹(区分大小写),它们都被跟踪到本地的单个目录中。我如何正确地删除其中一个文件夹,而不影响我的本地文件夹?
我记得我采取的一般步骤如下:
  1. 我有一个名为"MyDirectory"的目录。
  2. 我将一些代码推送到该目录的Github上。
  3. 我更改了目录名称为"mydirectory"。
  4. 我意识到Github默认是不区分大小写的(所有我的代码更改都添加到了Github上的"MyDirectory"中),所以我运行了"git config core.ignorecase false"。
  5. 我重新推送了更改,这在Github上创建了一个新目录。 (此时,Github有两个目录,一个名为MyDirectory,另一个名为mydirectory。我的本地只有mydirectory。)
  6. 我无法找到一个好的方法从Github中删除MyDirectory,所以我手动删除了其内部的所有文件,按照这些步骤进行操作。
  7. 现在,当我运行git pull时,会从本地删除mydirectory(我不想要这个)。

2
几点澄清:1. “GitHub默认情况下不区分大小写”是不准确的。问题在于您的操作系统文件系统以及git与其交互的方式,而不是GitHub。2. git不跟踪目录。它只跟踪文件的内容。因此,删除目录的唯一方法是删除该目录中的文件。 - Code-Apprentice
1
这个页面 https://dev59.com/Smgu5IYBdhLWcg3wpYcj#11183844 可能会有所帮助,里面的链接也值得参考。 - Code-Apprentice
1
是的,你需要这样做。复制所有文件,删除本地重复目录,拉取,现在一切都同步了。现在再次创建目录,只需一次,并将东西放入其中并推送。 - matt
2
不要重复第四步所做的事情。Git存储库中的core.ignorecase设置告诉Git如何处理你的计算机实际行为。更改它意味着你在欺骗Git:它不会改变你的计算机行为,只会改变Git尝试处理你的计算机行为的策略,可能导致Git表现不佳。 - torek
1
@Code-Apprentice 感谢你的更正。看来我需要更多地了解 git 的工作原理。Matt,我最终也做了类似的操作。谢谢。Torek,我明白了。结合 Code-Apprentice 的回答,这就解释了为什么远程更改会导致在 git pull 后删除我的本地文件。我想将来遇到这个问题时应该使用 "git mv"。 - Azianese
@Azianese 我发布了一个伪答案,给我的上面的评论添加了一些细节。 - Code-Apprentice
1个回答

3
TLDR: 不要设置 core.ignorecase=false。这与您的操作系统相反,会导致 Git 行为不可预测。
我认为有关文件名、Git 和 GitHub 存在一些混淆。
1. 操作系统的文件系统:Linux 和 Mac 使用区分大小写的文件名。Windows 文件名不区分大小写。 2. Git:Git 有一个配置称为 core.ignorecase,可以设置它来告诉 Git 关于您的操作系统的行为。如果您将其设置为与操作系统实际相反的情况,则 Git 的行为将不可预测。请注意,这不会修改底层文件系统的大小写敏感性。 3. GitHub:这是建立在 Git 之上的 Web 服务。对于此讨论,它并不是真正的因素,因为文件名的大小写敏感性不会在这个级别上进行管理。
此外,Git 只跟踪文件内容。它不直接跟踪目录。从 Git 的版本控制中删除目录的唯一方法是删除该目录中的文件。
我知道这并没有直接回答您的问题,但我希望它能澄清这三个部分如何影响此问题。

虽然这并不能像Matt的解决方案那样解决我的问题,但它确实帮助我在未来识别问题。因此,我很高兴接受这个答案。 - Azianese
@Azianese 好的,我已将那部分添加到答案中。 - Code-Apprentice

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接