Git分支名称 - 区分大小写还是不敏感?

时间:2016-07-21 01:45:41

标签: git github version-control git-branch

我是一个新的git用户,最近交付了一个过时的git存储库来照顾。

这是原始状态(由git show-branch输出):

! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [dev] Style Changes
        *   [dev^] SMS 5.4
        *   [dev~2] Logo Change
        *   [dev~3] SMS 5.3
        *   [dev~4] SMS 5.2
        *   [dev~5] SIT R-0.3.3 EDW SMS Layers
        *   [dev~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

请注意,此时有一个名为'dev'的分支。请注意,突出显示有几个对dev的引用(即dev,dev ^,dev~2等)。

出于我的发展目的,我试图提出一个名为'DEV'的分支,全部为首都。

所以我继续创建新的分支(git branch DEV),然后运行git show-branch -date-order:

! [DEV] Style Changes
    ! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [DEV] Style Changes
        *   [DEV^] SMS 5.4
        *   [DEV~2] Logo Change
        *   [DEV~3] SMS 5.3
        *   [DEV~4] SMS 5.2
        *   [DEV~5] SIT R-0.3.3 EDW SMS Layers
        *   [DEV~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

请注意,dev和DEV都列为分支。另请注意,在第5行,对dev的引用现在已更改为DEV(即DEV,DEV ^,DEV~2等)。

第5行输出是指什么?我希望它保持“dev”而不是改为“DEV”,因为它旁边的描述是指“dev”分支中旧工作的描述。

我试图通过将DEV分支名称修改为DV(运行git branch -m DEV DV)并显示分支现在看起来像:

! [DV] Style Changes
    ! [cr232] CR 232 Release
        * [dev] Style Changes
---------------
        *   [DV] Style Changes
        *   [DV^] SMS 5.4
        *   [DV~2] Logo Change
        *   [DV~3] SMS 5.3
        *   [DV~4] SMS 5.2
        *   [DV~5] SIT R-0.3.3 EDW SMS Layers
        *   [DV~6] SIT Release R 0.3.0
       +*   [cr232] CR 232 Release
       +*   [cr232^] Dashboard Fix
       +*   [cr232~2] Release for system testing

请注意,该分支现在包括DV和dev。另请注意,对dev的第5行引用现已更改为DV(即DV,DV ^,DV~2等)。

有没有办法在DV参考期间回到原始状态下的状态? git是否感到困惑,并用一个类似的分支重命名我的历史信息,只是根据大写情况而不同?

请协助我解决这个问题。谢谢堆

2 个答案:

答案 0 :(得分:36)

回答主题行中的问题,没有解决有关git show-branchlike ElpieKay的任何内容,我实际上从未使用git show-branch;它似乎主要是错误的信息):

Git分支名称和标记名称以及所有其他引用名称,正如Git所称 - 最初意图区分大小写。

这一切都完全适用于Linux / Unix机器,其中Git的代码首先区分大小写。当Git将分支名称存储在文件系统中作为文件名(它只有有时)时,文件系统也区分大小写。 1

有时在Windows和某些MacOS系统上失败。具体来说,当Git在单个文件中存储引用时,它会失败,这些文件的名称是从引用名称派生的,并且这些文件名不区分大小写(例如,保留大小写,但在名称匹配期间折叠;或者甚至将所有内容转换为大写 - 只有在真正的旧的FAT 8.3格式中,但我们希望没有现代文件系统这样做。)

如上所述,Git并不总是将引用名称存储为文件名。实际上,在初始克隆时,所有名称都在一个名为.git/packed-refs 2 的文件中,因此此时它们 区分大小写。但随着时间的推移,它们会“解包”, 3 然后在某些系统上它们会变成大小写折叠。

因为它在某些系统上有时会失败,所以通常最好避免使用仅在大小写上不同的多个引用名称。

1 当然,在现代Unix / Linux系统上,您现在可以访问保留大小写但不区分大小写的文件系统,现在可以告诉Windows和MacOS不要这样做一些文件系统的大小写折叠。 (但是如果你从默认设置中更改,那么期望用于你的盒子的软件会失败,因为它会发生。像Photoshop这样的内部尝试使用名为fooFOO的文件,并希望这可以参考同一个文件!)

2 这个打包引用文件已存在很长一段时间了,但并非永远存在,Git的早期版本可能不会使用它。在内部,Git正在获取一个新的“可插入引用名称接口”,未来的Git版本可能既不使用此文件,也不使用单个每个引用文件。

3 通常,创建或更新引用会导致解压缩的引用文件出现。运行git pack-refs --all将使用打包的引用替换解压缩的引用,从而恢复完整区分大小写。如果没有--allgit pack-refs只打包已经打包的引用,这在很大程度上是一种无用的操作模式(它适用于不再使用的情况)。

答案 1 :(得分:9)

  

所以我继续创建新的分支(git branch DEV)

当您在分支DEV时,您创建了一个新分支dev。所以DEVdev是两个指向同一提交的分支。将DEV重命名为DV后,现在DVdev是两个指向同一提交的分支。

一切都很好。如果您不希望DV打扰您,您只需运行git branch -d DV即可删除分支DV。如果你确实想要建立一个新分支,最好遵循一些不会让你和其他人混淆的命名规则。

我从未使用git show-branchgit log --oneline --all --graph --decorate=full绘制了清晰的日志图。