【问题标题】:Is git not case sensitive?git不区分大小写吗?
【发布时间】:2023-03-25 21:14:01
【问题描述】:

在我的部分名为_Electronics的第一个承诺中,它以大写字母开头,然后我将其更改为_electronics

cygwin下的Git在提交新名称后忽略了大小写,所以我在目标repo中手动更改了名称。

现在它有时会将已提交的 _electronics 部分更改为 _Electronics

我做错了什么?

【问题讨论】:

  • 你使用的是什么操作系统?
  • 你使用的是什么文件系统?
  • 带有 cygwin 的 Windows。我的服务器运行 Ubuntu Linux。不知道文件系统,我猜是 ext3 或 ext2 - 我的提供商配置了最小安装。
  • Windows 决定不区分大小写你不高兴吗?
  • Windows 不区分大小写,但有时(今天更频繁地)保留

标签: git version-control case-sensitive


【解决方案1】:

这将取决于 core.ignorecase 配置值,在区分大小写的文件系统中设置为 false,在 Windows 上的 msysgit 中设置为 true。

core.ignorecase

如果为 true,则此选项启用各种变通方法,以使 git 在不区分大小写的文件系统(如 FAT)上更好地工作。为了 例如,如果目录列表在 git 期望时找到“makefile” “Makefile”,git 会假设它确实是同一个文件,然后继续 将其记住为“Makefile”。

默认为 false,除非 git-clone(1) 或 git-init(1) 会探测并将 core.ignorecase 设置为 true 已创建。

更多详情请参见Changing capitalization of filenames in Git 的回复。

【讨论】:

  • 这是 imo 的正确答案。对于未来的我,请使用 git config --unset-all core.ignorecase && git config --system core.ignorecase false 和 sudo。
  • 同上 James,@Znarkus 已经确定了 OS X 上此问题的修复方法,谢谢!
  • @Znarkus 也可以在 Windows 上工作。漂亮。
  • @Znarkus,在 OSX 上这样做的问题是,当您通过查找器重命名文件并且仅更改大小写时,git 会将重命名的版本视为一个全新的文件,但它不会'不为旧版本的文件生成相应的“删除”操作。因此,如果您提交并推送到 github,github 将同时拥有旧名称和新名称文件,但您的本地系统将只有新文件,而 git 不会更聪明。
  • @spiralganglion 对于 OSX 上的 web 开发,我真的可以推荐 creating a case sensitive partition,然后将其挂载为您的 www 目录。
【解决方案2】:

这将被视为 2 个不同的东西,但会导致您在不区分大小写的系统上出现问题。如果是这种情况,请确保您使用制表符完成任何路径或文件名。此外,要更改某些情况下的名称,请执行以下操作:

mv file.txt temp.txt
git add -A
git commit -m "renaming..."
mv temp.txt File.txt
git add -A
git commit --amend -m "Renamed file.txt to File.txt"

这是一种明确的方式来提交更改,然后折叠提交。一种更简单的方法是同时操作索引和工作文件夹:

git mv file.txt temp.txt
git mv temp.txt File.txt
git commit -m "Renamed file.txt to File.txt"

这也与调整目录名称有关:git mv and only change case of directory

【讨论】:

  • 看起来是对的(只是我从大写字母改为小写字母)
  • 我偷看了,只要习惯了cygwin,就是用cygwin更舒服-谢谢提示
  • 你可以做git mv file.txt File.txt。不确定这是否是一个新的 git 功能。
【解决方案3】:

这要容易得多:

git mv Electronics electronics -f
git commit -m "That was easy!"

【讨论】:

  • 你在不区分大小写的文件系统上试过这个吗?
  • 我最初将其视为原始海报试图执行文件夹而不是文件的大小写更改重命名。现在我重新读了一遍,还不清楚。事实上,mv -f 可以用于文件。
【解决方案4】:
git config --system core.ignorecase false

【讨论】:

    【解决方案5】:

    在我的场景中,我有两个文件夹 testsTests,它们在 Github 中显示为两个单独的文件夹,但在 Windows 中显示为一个 Tests 文件夹。我的目标是将它们合并成tests

    我使用了以下方法:

    1. 新建文件夹temp
    2. 将所有内容从Tests复制到temp
    3. 删除Tests
    4. 执行git rm Tests -r
    5. temp 重命名为tests

    【讨论】:

      【解决方案6】:

      我已经尝试解决这个问题,在 Windows10 上成功了

      假设 bitbucket TEST 和 test 上有两个文件夹,但是当我在磁盘上克隆 repo 时,它只创建 TEST,我想将 test 作为包含所有文件的 git 上的单个文件夹。

      我需要在命令行上执行以下命令 git mv 测试 test1 -f git mv text1 测试 -f git commit -m "重命名..." git推送

      现在您将看到在 bitbucket 上更正了文件夹层次结构。

      【讨论】:

        猜你喜欢
        • 2012-02-12
        • 2016-11-24
        • 1970-01-01
        • 2012-10-03
        • 2011-09-24
        • 2014-12-17
        • 1970-01-01
        • 2012-12-01
        • 2013-03-06
        相关资源
        最近更新 更多