【问题标题】:How to make git bash show branch name in submodules如何让 git bash 在子模块中显示分支名称
【发布时间】:2021-08-23 08:41:38
【问题描述】:

Git bash 将分支名称显示为

 (master)

但是当使用子模块时,它现在显示的是哈希而不是名称,例如:

 ((445c03f...))

如何让它在子模块中显示分支的名称?

【问题讨论】:

标签: git git-branch git-bash git-submodules


【解决方案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 是否也应该检出提交b789abc2

所有这些在 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——表现得很好,但是因为子模块是如此的僵硬、脆弱和混乱,我不太喜欢设置递归选项.

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 2017-07-31
    • 2021-09-22
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多