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

jak*_*jak 18 git version-control github 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
Run Code Online (Sandbox Code Playgroud)

请注意,此时有一个名为"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
Run Code Online (Sandbox Code Playgroud)

请注意,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
Run Code Online (Sandbox Code Playgroud)

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

有什么办法可以回到DV引用期间的原始状态吗?这个git是否被混淆了,并且用一个类似的分支重命名了我的历史信息,只是根据大写情况而有所不同?

请协助我如何解决这个问题.谢谢堆

tor*_*rek 40

回答主题中的问题,没有解决任何问题git show-branch(比如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这样的内部尝试使用名为的文件foo,FOO并期望这个引用同一个文件!)

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

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

  • 有人需要创建一个新问题,以便我们可以将 torek 的答案附加到新问题中并使其成为可接受的答案。这个答案迫切需要更广泛的曝光。尤其是关于打包引用和分支名称的部分,在存储库的生命周期内 git 处理的方式不一致。 (4认同)

Elp*_*Kay 10

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

您在分支机构DEV时创建了一个新分支dev.所以DEV并且dev是指向同一提交的两个分支.后改名DEVDV,现在DVdev两个分支指向相同的提交.

一切都很好.如果你不想DV打扰你,你可以跑去git branch -d DV删除分支git show-branch.如果你确实想要建立一个新的分支,最好遵循一些不会让你和其他人混淆的命名规则.

我从来没用过git log --oneline --all --graph --decorate=full.DEV绘制清晰的日志图形.