【问题标题】:git submodule update not functioninggit子模块更新不起作用
【发布时间】:2014-08-29 07:44:37
【问题描述】:

我有一个包含各种嵌套子模块的存储库。提交和推送的效果非常好,并且更改在 GitHub 上如预期的那样可见。

在测试/生产环境中,正在使用以下命令部署此项目的新版本:

git pull --recurse-submodules
git submodule update --init --recursive

但这只会更新根项目,没有任何子模块更新到与 GitHub 上的 HEAD 关联的提交。到目前为止,我发现更新整个项目的唯一方法是在每个单独的子模块文件夹中运行 git pull

我知道git submodule update 是大多数地方引用的方法,但在这种情况下它并没有真正产生任何结果。可能是什么原因?

【问题讨论】:

    标签: git


    【解决方案1】:

    您已将特定版本提交到您的存储库。对于 git,子模块是包含您提供的版本的 sha1-hash 的“文件”。 git submodule update --init --recursive 确保您的子模块在该版本中可用。

    例如:

    • 你在一个目录上创建了一个git init 并且有一个空的 repo
    • 您使用 git submodule add 添加一个子模块,该子模块将记录您在自己的存储库中添加的该存储库的当前 master sha1-hash
    • 对子模块进行了多次提交,但您的 repo 仍将包含您在添加子模块时拥有的一个哈希
    • 如果您在子模块中创建 git pull,您将获得新的提交并在您自己的存储库中进行未提交的更改(子模块主模块的新 sha1-hash)
    • 一旦您提交该更改,您就会“固定”子模块的当前版本
    • git submodule update 现在将强制执行新版本存在

    因此,如果您自己的存储库的其他贡献者更新了他的结帐并执行git submodule update,他将获得您固定的版本。所以一般来说,子模块更新只会在子模块没有被检出或者有人更改了你的存储库中的相关哈希时才会做一些工作。

    【讨论】:

    • 所有这些信息都是正确的,但似乎不是问题的答案。
    【解决方案2】:

    您需要确保您的子模块遵循一个分支,否则它们只会在特定的 SHA1 处检出(不是最晚的分支,而是 special entry of the index of your parent repo

    请参阅“Git submodules: Specify a branch/tag”以使您的子模块跟随分支。

    那么git submodule update --init --recursive --remote 就足以查看该分支的最新信息。

    这(git submodule update --remote)需要 git 1.8.2+ 2013 年 3 月。OP Luís de Sousa has a git 1.7.9.5(2012 年 3 月)不提供此功能。

    【讨论】:

    • 我尝试按照该链接中的说明进行操作,但是当我发出跟踪命令 git checkout -b master --track origin/master 时,我收到一条错误消息:fatal: A branch named 'master' already exists.。这发生在项目的所有子模块中。
    • @LuísdeSousa 这是有道理的。试试git branch -u origin/master master
    • 好的,我忽略了这一点,您可能需要编辑该答案以使该部分更清晰。我继续执行这些指令,设置层次结构中的所有子模块以跟踪特定分支,然后提交并推送主项目。但是要部署它,命令git submodule update --recursive --remote 似乎无效。我使用的是 git 1.7.9.5,它没有 --remote 命令的 --remote 标志。
    • @LuísdeSousa 是的,我已经编辑了我所指的旧答案。是的,我添加了 git 版本要求(git 1.8.2+,2013 年 3 月)。 1.7.9.5(2012年3月,3年多前)确实有点老了。
    • 所以基本上答案是我使用的 git 版本太旧了。请将此添加到您的答案中并接受它。感谢您的勤奋。
    猜你喜欢
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2012-09-14
    • 1970-01-01
    • 2022-01-23
    • 2012-07-09
    相关资源
    最近更新 更多