如何让 git bash 在子模块中显示分支名称
Posted
技术标签:
【中文标题】如何让 git bash 在子模块中显示分支名称【英文标题】:How to make git bash show branch name in submodules 【发布时间】:2021-08-23 08:41:38 【问题描述】:Git bash 将分支名称显示为
(master)
但是当使用子模块时,它现在显示的是哈希而不是名称,例如:
((445c03f...))
如何让它在子模块中显示分支的名称?
【问题讨论】:
这能回答你的问题吗? How can I specify a branch/tag when adding a Git submodule? @Eng_Farghly ***.com/a/55570998/7976758 ***.com/search?q=%5Bgit-submodules%5D+detached+HEAD 【参考方案1】:Rule for beginners: Submodules don't use branch names. Rule for advanced Git users: Submodules don't use branch names yet. ?(请参阅链接以在此处收集单词 yet 的含义。)
正如phd linked to in a comment 指出的answer,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
:您必须运行@ 987654336@。设置递归选项会使这个——我的意思是git checkout
/git switch
——表现得很好,但是因为子模块是如此的僵硬、脆弱和混乱,我不太喜欢设置递归选项.
【讨论】:
以上是关于如何让 git bash 在子模块中显示分支名称的主要内容,如果未能解决你的问题,请参考以下文章
Git Bash 提示 - 当前分支名称在 Git 命令后停止显示