繁体   English   中英

git:将子模块分支重置为远程标签

[英]git: reset submodule branch to remote tag

我有一个带标签的主模块,我在主模块下有一些子模块。 我想将主模块重置为特定标签(例如“v2.11.0”)并将子模块也重置为该标签。 该标签仅在主模块中,因此它是子模块的远程标签。

git fetch --all --tags
git reset --hard tags/v2.11.0
git submodule foreach --recursive git checkout -B master
git submodule foreach --recursive git reset --hard tags/v2.11.0

将主模块重置为标签有效。 但是将子模块重置为远程标记不适用于上面的代码。 你知道怎么回事吗?

格雷茨

标签是提交的名称。 因此,超级项目中的tags/v2.11.0标签是超级项目中特定提交的名称,即表示编号或哈希 ID。 所以这:

 git fetch --all --tags git reset --hard tags/v2.11.0

有点奇怪, 1但并不完全疯狂。

但是,每个子模块都是一个单独的 Git 存储库 那个单独的 Git 存储库可能有也可能没有标签v2.11.0 如果确实有这样一个标签,该标签将代表其他一些承诺在其他的Git仓库存在:

标签仅在主模块中......

我认为这意味着每个子模块都没有这样的标签。

... 所以它是子模块的远程标签

不,这不对。 没有“远程标签”这样的东西。 标签只是提交哈希 ID 的名称,在任何给定的存储库中,您要么拥有该标签,要么没有。 如果你没有标签,你就没有那个名字。 一些其他存储库的标签是该存储库中某个哈希 ID 的名称。

Git 是关于提交的。 每个提交都有一个唯一的哈希 ID。 这就是您使用 Git 所做的很多事情:您可以使用masterdevelop类的分支名称,或者像v2.11.0这样的标签名称,但您实际上是在告诉 Git让我提交b0ff0cab1e... (完整的哈希 ID 又长又丑,但您可以通过以下方式找到它:

git rev-parse tags/v2.11.0

例如。)

使用超级项目的正常方法是在超级项目提交中为每个子模块提供正确的哈希 ID。 这是提交本身的一部分,作为 Git 称为gitlink的实体。 检查超级项目提交结果会将该 gitlink 放入超级项目 Git 的索引中。 Git 的索引现在保存,作为路径名和哈希 ID 对,如path/to/submodulefeedc0ffee... ,人们可能希望子模块进行git checkout (作为分离的 HEAD)的提交。

如果你想让每个子模块在那个提交时成为一个分离的 HEAD,你现在应该运行:

git submodule update checkout

或者:

git submodule update --recursive checkout

使子模块本身递归地检出它自己的任何子模块。


1 git fetch--all选项意味着从所有遥控器中获取 这在您使用它的上下文中有点意义,因为每个遥控器都可能有一些标签集,这将使您的 Git 将所有标签复制到一个巨大的标签联合中。 如果存在冲突——如果远程 A 说标签v1.2.3应该意味着deadbeef而远程 B 说标签v1.2.3应该意味着feedf00dfeedf00d ,无论你先选择哪个“赢”。

git reset --hard可能是错误的做法。 如果你已经在一个分离的HEAD ,这就像对给定的标签进行git checkout ,副作用是丢弃任何尚未提交的工作。 如果您在分支名称上,这会更改该分支名称中存储的哈希 ID,这可能是错误的。

总的来说,运行git fetch --tags而没有--all来从当前远程获取,或者选择一个特定的远程来信任可能更明智; 或者如果只有一个遥控器, git fetch --tags将使用那个遥控器,然后--all是不必要的。 然后,完成后,使用git checkout tags/v2.11.0git switch --detach tags/v2.11.0 ,如果有未提交的工作,它会抱怨。

git submodule update --init --recursive
git submodule foreach git checkout -f -B master

这会将子模块设置为属于超级项目标签的提交。 之后,将在此提交上检出 master 分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM