【问题标题】:Is HEAD in git case insensitive on all platforms?git 中的 HEAD 是否在所有平台上都不区分大小写?
【发布时间】:2014-11-16 13:54:17
【问题描述】:

在 Windows 上使用 msysgit,我可以这样做:

git checkout head

或

git checkout HEAD

两者都有效。我没有要测试的 linux 环境,但我只是好奇:HEAD 是否设计不区分大小写?所有平台都这样吗?

【问题讨论】:

    标签: git


    【解决方案1】:

    HEAD 在 Linux 上区分大小写。

    例如:

    $ git checkout head
    error: pathspec 'head' did not match any file(s) known to git.
    $ git checkout HEAD
    Your branch is up-to-date with 'origin/master'.
    

    Ubuntu 14.04 上的 Git 版本 1.9.1。

    【讨论】:

    • 谢谢,简单明了的回答。不幸的是,msysgit 允许养成不良习惯(但不区分大小写可能有很好的技术原因)。
    • 或者(自 1.8.5 IIRC 起)使用@。
    【解决方案2】:

    HEAD 是否区分大小写取决于操作系统的文件系统是否区分大小写。

    当你签出 HEAD 时,git 实际上会在文件夹 .git 下寻找一个名为“HEAD”的文件。如果你用小写字母输入 HEAD,git 会查找带小写字母的文件名。可以看到 .git/HEAD 文件实际上包含了提交 HEAD 指向的哈希码。

    因此,HEAD 的典型区分大小写是:

    • Linux 上区分大小写
    • 在 Windows、MacOS 上不区分大小写

    【讨论】:

    • MacOS 默认不使用不区分大小写的文件系统吗?
    • 谢谢基思,我没注意到。 @Lorenzo Marcon,您是否在 Mac OS 中使用区分大小写的 HFS+ 版本?
    • 我可以用git --version 返回git version 2.20.1 (Apple Git-117) 来重现 Lorenzo Marcon 在 Mojave 上的行为,而且我的文件系统不区分大小写。例如,我可以用rm A 删除文件a。同样git push origin HEad 似乎推送HEAD,git symbolic-ref HEad 和git symbolic-ref HEAD 都返回refs/heads/foo_branch,git branch HEad 和git checkout HEad 很有趣,而git branch -d HEad 有点令人惊讶地做了正确的事情并删除了@ 987654333@ 分支没有明显破坏我的回购。
    【解决方案3】:

    回答涵盖 Mac OSX(小牛队):

    $ git checkout HEAD
    Your branch is up-to-date with 'origin/master'.
    

    但是:

    $ git checkout head
    Note: checking out 'head'.
    
    You are in 'detached HEAD' state. You can look around, make experimental
    changes and commit them, and you can discard any commits you make in this
    state without impacting any branches by performing another checkout.
    
    If you want to create a new branch to retain commits you create, you may
    do so (now or later) by using -b with the checkout command again. Example:
    
      git checkout -b new_branch_name
    
    HEAD is now at f44b740... fix if endScreen(s) not present
    

    顺便说一下,那个哈希是当前分支的头(在我的测试中,同样包含在.git/refs/heads/master中)

    有趣的行为。

    (git 1.8.5.2)

    【讨论】:

      【解决方案4】:

      HEAD 在 Linux 环境中区分大小写。据我所知,它只在 mysysgit 中不区分大小写。

      在 Linux 环境中它给出:error: pathspec 'head' did not match any file(s) known to git.

      【讨论】:

        猜你喜欢
        • 2016-11-24
        • 1970-01-01
        • 2022-01-25
        • 2023-03-25
        • 2013-03-16
        • 2012-02-12
        • 2013-03-28
        • 2022-11-12
        • 2011-03-27
        相关资源
        最近更新 更多