如何使 git bash 在子模块中显示分支名称
How to make git bash show branch name in submodules
Git bash 显示分支名称为
(master)
但是当使用子模块时,它现在显示哈希而不是名称,例如:
((445c03f...))
如何让它在子模块中显示分支名称?
Rule for beginners: Submodules don't use branch names. Rule for advanced Git users: Submodules don't use branch names yet.(请参阅 link 以了解此处 yet 一词的含义。)
如 answer that 所述,Git 子模块 通常 在分离头模式下。当您进入子模块时,您所看到的——分离的 HEAD 的哈希 ID——是真实的。在这里显示分支名称可能是一种美丽的错觉,但要小心美丽的错觉:它们可能会让你走在一条漂亮的黄砖路上,实际上只是从悬崖上掉下来。
这里的总体思路是,超级项目提交 决定了应该签出的内容。毕竟, 超级项目的 文件就是这种情况:如果您在超级项目中 git checkout a123456
,您将获得提交 a123456
的所有文件。1 如果该提交需要子模块 sub/mod
中的提交 b789abc
,难道 sub/mod
不应该也检出提交 b789abc
吗?2
在 Git 中,所有这一切的实际实施都存在重大缺陷。这让我想起了一家满是缺少 safety guards 的电动工具的商店。 git submodule update
命令 可以 使用分支名称,但它使用分支名称的方式令人困惑(在某些上下文中是明智的,但令人困惑)。如果你想使用子模块,尽量将它们视为只读的“从这个存储库获取这个提交”操作,因为那是 Git 倾向于对它们做的。
1嗯,也就是说,只要我们不玩聪明的索引和工作树技巧,如 Checkout another branch when there are uncommitted changes on the current branch.
中所示
2但是,除非您使用 --recursive
或设置各种选项,否则 git checkout
不会 自动签出 b789abc
:你必须 运行 git submodule update
。设置递归选项使这个——this 我的意思是 git checkout
/ git switch
——表现良好,但因为子模块是如此僵硬、脆弱和混乱,我不不太喜欢设置递归选项。
Git bash 显示分支名称为
(master)
但是当使用子模块时,它现在显示哈希而不是名称,例如:
((445c03f...))
如何让它在子模块中显示分支名称?
Rule for beginners: Submodules don't use branch names. Rule for advanced Git users: Submodules don't use branch names yet.(请参阅 link 以了解此处 yet 一词的含义。)
如 answer that
这里的总体思路是,超级项目提交 决定了应该签出的内容。毕竟, 超级项目的 文件就是这种情况:如果您在超级项目中 git checkout a123456
,您将获得提交 a123456
的所有文件。1 如果该提交需要子模块 sub/mod
中的提交 b789abc
,难道 sub/mod
不应该也检出提交 b789abc
吗?2
在 Git 中,所有这一切的实际实施都存在重大缺陷。这让我想起了一家满是缺少 safety guards 的电动工具的商店。 git submodule update
命令 可以 使用分支名称,但它使用分支名称的方式令人困惑(在某些上下文中是明智的,但令人困惑)。如果你想使用子模块,尽量将它们视为只读的“从这个存储库获取这个提交”操作,因为那是 Git 倾向于对它们做的。
1嗯,也就是说,只要我们不玩聪明的索引和工作树技巧,如 Checkout another branch when there are uncommitted changes on the current branch.
中所示2但是,除非您使用 --recursive
或设置各种选项,否则 git checkout
不会 自动签出 b789abc
:你必须 运行 git submodule update
。设置递归选项使这个——this 我的意思是 git checkout
/ git switch
——表现良好,但因为子模块是如此僵硬、脆弱和混乱,我不不太喜欢设置递归选项。