git:子模块跟踪当前分支

4
根据git文档,我应该可以运行以下命令:

git子模块--分支

git submodule add -b . https://my/repo

添加一个子模块,用于跟踪超级项目当前分支的头部。
要添加的仓库分支作为子模块。分支的名称记录在`.gitmodules`中,以进行`--remote`更新。特殊值`.`用于表示子模块中的分支名称应该与当前仓库中的当前分支相同。
但是当我这样做时,我遇到了以下错误:
致命错误:'origin/.'不是提交和'.'不能从它创建分支。
我正在运行Git 2.21。我是否完全误解了指示?

请参见 https://dev59.com/FLLma4cB1Zd3GeqPXz4e - torek
2个回答

2
git submodule add似乎没有任何代码来检查句点。克隆后,它将尝试并检出“。”分支,这自然不存在。
但是git submodule update --remote确实进行了检查,并特殊使用了“。”。
要使其正常工作,您需要执行以下操作:
  1. git submodule add -b master https://my/repo
  2. git submodule set-branch --branch . REMOTE_NAME
  3. git submodule update --remote
  4. 利润
每次在超级项目上运行更新时,它都会获取分支的提示。
无论是文档不清楚还是存在添加子模块的错误,我都不确定。
编辑:根据Akom的评论进行了更新,因为这比手动将句点添加为分支名称更容易编辑.gitmodules文件。

项2可以更改为git submodule set-branch --branch . REMOTE_NAME(至少在git 2.25.1中有效)。 - Akom
请问您能否举个例子,说明“REMOTE_NAME”应该指向什么? - user320550
@user320550 "origin" 通常是典型的。 - SirKumbskull

0

选项-b需要仓库https://my/repo中分支的名称。例如,master

git submodule add -b master https://my/repo

Git 无法“跟踪超级项目当前分支的头部”。必须明确给出该分支。

当您使用 git checkout 切换超级项目分支时,git 不会自动切换子模块的分支 - 您必须手动运行 git submodule update 或从 post-checkout 钩子中运行。

请参见 为什么 git checkout 时 git submodule update 不自动运行?

https://stackoverflow.com/search?q=%5Bgit-submodules%5D+switch+branch


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接