Git 分支名称 - 区分大小写还是不区分大小写?
Git branch name - case sensitive or insensitive?
我是一个新 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 分支 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”分支期间旧工作的描述。
我正在尝试 return 通过将 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。另请注意,第 5 行对 dev 的引用现在已更改为 DV(即 DV、DV^、DV~2 等)。
有什么方法可以恢复到 DV 参考的原始状态吗? git 是否混淆了我的历史信息并用一个相似但仅大写不同的分支重命名?
请帮助我解决这个问题。谢谢堆
So I went ahead and create new branch (git branch DEV)
您在分支 dev
上创建了一个新分支 DEV
。所以 DEV
和 dev
是指向同一个提交的两个分支。将 DEV
重命名为 DV
后,现在 DV
和 dev
是指向同一个提交的两个分支。
一切都很好。如果您不想 DV
打扰您,您可以 运行 git branch -d DV
将其删除。如果你确实想创建一个新分支,最好遵循一些不会混淆你和其他人的命名规则。
我没用过git show-branch
。 git log --oneline --all --graph --decorate=full
绘制清晰的对数图。
只回答主题行中的问题,没有解决任何关于 git show-branch
的问题(,我从未真正使用过 git show-branch
;这似乎主要是错误的信息):
Git 分支名称和标签名称,以及所有其他 reference 名称,Git 称它们为最初 区分大小写。
这一切都在 Linux / Unix 机器上完美运行,其中 Git 的代码开始时区分大小写。当 Git 将文件系统 中的分支名称存储为文件名 (它只是 有时 ),文件系统也是大小写-敏感.1
有时 在 Windows 和某些 MacOS 系统上失败。具体来说,当 Git 在单个文件中存储引用时失败,这些文件的名称是从引用名称派生的,并且这些文件名不区分大小写(例如,保留大小写,但在名称匹配期间折叠大小写;甚至将所有内容都转换为仅大写,就像真正古老的 FAT 8.3 格式一样,但我们希望现代文件系统不会这样做)。
如上所述,Git 并不总是将参考名称存储为文件名。事实上,在初始克隆中,所有名称都在一个名为 .git/packed-refs
、2 的文件中,因此此时它们 是 大小写敏感的。但随着时间的推移,它们会变成 "unpacked",3,然后在某些系统上它们会变成大小写折叠。
因为它有时在某些系统上会失败,所以通常最好避免使用仅大小写不同的多个引用名称。
1当然,在现代 Unix/Linux 系统上,您现在可以访问保留大小写但不区分大小写的文件系统,并且 Windows 并且 MacOS 现在可以被告知不要对某些文件系统进行大小写折叠。 (但是,如果您更改默认设置,则预计专为您的盒子设计的软件会失败,因为它会。像 Photoshop 之类的东西在内部尝试使用名为 foo
和 FOO
的文件,并期望它指的是同一个文件!)
2这个打包引用文件已经存在了很长一段时间,但不会永远存在,Git 的早期版本可能不会使用它。在内部,Git 正在获取一个新的 "pluggable reference name interface",Git 的未来版本可能既不使用此文件,也不使用单独的参考文件。
3通常,创建或更新引用会导致解压缩的引用文件出现。 运行 git pack-refs --all
将用压缩引用替换未压缩引用,恢复完全区分大小写。没有--all
,git pack-refs
只打包已经打包的引用,这在很大程度上是一种无用的操作方式(它是为不再使用的情况而设计的)。
我是一个新 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 分支 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”分支期间旧工作的描述。
我正在尝试 return 通过将 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。另请注意,第 5 行对 dev 的引用现在已更改为 DV(即 DV、DV^、DV~2 等)。
有什么方法可以恢复到 DV 参考的原始状态吗? git 是否混淆了我的历史信息并用一个相似但仅大写不同的分支重命名?
请帮助我解决这个问题。谢谢堆
So I went ahead and create new branch (git branch DEV)
您在分支 dev
上创建了一个新分支 DEV
。所以 DEV
和 dev
是指向同一个提交的两个分支。将 DEV
重命名为 DV
后,现在 DV
和 dev
是指向同一个提交的两个分支。
一切都很好。如果您不想 DV
打扰您,您可以 运行 git branch -d DV
将其删除。如果你确实想创建一个新分支,最好遵循一些不会混淆你和其他人的命名规则。
我没用过git show-branch
。 git log --oneline --all --graph --decorate=full
绘制清晰的对数图。
只回答主题行中的问题,没有解决任何关于 git show-branch
的问题(git show-branch
;这似乎主要是错误的信息):
Git 分支名称和标签名称,以及所有其他 reference 名称,Git 称它们为最初 区分大小写。
这一切都在 Linux / Unix 机器上完美运行,其中 Git 的代码开始时区分大小写。当 Git 将文件系统 中的分支名称存储为文件名 (它只是 有时 ),文件系统也是大小写-敏感.1
有时 在 Windows 和某些 MacOS 系统上失败。具体来说,当 Git 在单个文件中存储引用时失败,这些文件的名称是从引用名称派生的,并且这些文件名不区分大小写(例如,保留大小写,但在名称匹配期间折叠大小写;甚至将所有内容都转换为仅大写,就像真正古老的 FAT 8.3 格式一样,但我们希望现代文件系统不会这样做)。
如上所述,Git 并不总是将参考名称存储为文件名。事实上,在初始克隆中,所有名称都在一个名为 .git/packed-refs
、2 的文件中,因此此时它们 是 大小写敏感的。但随着时间的推移,它们会变成 "unpacked",3,然后在某些系统上它们会变成大小写折叠。
因为它有时在某些系统上会失败,所以通常最好避免使用仅大小写不同的多个引用名称。
1当然,在现代 Unix/Linux 系统上,您现在可以访问保留大小写但不区分大小写的文件系统,并且 Windows 并且 MacOS 现在可以被告知不要对某些文件系统进行大小写折叠。 (但是,如果您更改默认设置,则预计专为您的盒子设计的软件会失败,因为它会。像 Photoshop 之类的东西在内部尝试使用名为 foo
和 FOO
的文件,并期望它指的是同一个文件!)
2这个打包引用文件已经存在了很长一段时间,但不会永远存在,Git 的早期版本可能不会使用它。在内部,Git 正在获取一个新的 "pluggable reference name interface",Git 的未来版本可能既不使用此文件,也不使用单独的参考文件。
3通常,创建或更新引用会导致解压缩的引用文件出现。 运行 git pack-refs --all
将用压缩引用替换未压缩引用,恢复完全区分大小写。没有--all
,git pack-refs
只打包已经打包的引用,这在很大程度上是一种无用的操作方式(它是为不再使用的情况而设计的)。