【问题标题】:git submodules not consistently updatinggit 子模块没有持续更新
【发布时间】:2016-09-28 10:16:50
【问题描述】:

我的工作场所最近切换到了 git 和设置组件的权力,这些组件作为子模块在项目之间共享,这导致试图弄清楚如何使用它们的人们普遍感到沮丧。

看了一些网上的建议,我把项目和子模块拉下来如下:

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

但是,有时检查子模块的状态会给我如下信息:

> git status
On branch feature
Your branch is behind 'origin/feature' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)
nothing to commit, working directory clean

如果我这样做就解决了

git submodule foreach git pull

我很茫然。你能告诉我我做错了什么吗?

谢谢!

【问题讨论】:

  • stackoverflow.com/a/21195182/6194839 也许git submodule update --remote --mergegit submodule foreach git pull origin master 会起作用吗?也许git submodule --help 可能会为您指明正确的道路。我的第一个问题是您可能有一个命令 --recursive --remote --init --merge 并没有按照您的想法执行。
  • 你能澄清为什么你认为你做错了什么吗?除非您告诉它们,否则子模块不会更新。
  • @eis,我的印象是git submodule update 会从子模块中提取最新的,但显然不会

标签: git


【解决方案1】:

来自 OP 的评论:

我的印象是 git submodule update 会拉 子模块中的最新版本,但显然没有

确实没有。例如here:

解释了它的作用

更新

通过克隆丢失的子模块并更新工作树来更新注册的子模块以匹配超级项目的期望 子模块。

合并

超级项目中记录的提交将被合并到子模块中的当前分支中。

Superproject 将始终记录有关其每个子模块的特定提交。更新命令将使用该提交并检查它 - 它实际上不会更新它以引用项目可能具有的任何新情况。

您本身并没有做错任何事情,这就是它的工作方式。如果要将记录的提交移动到最新的提交,则必须以另一种方式进行。 this other thread 中更好地解释了这样做,但简而言之,使用 --remote 而不是 --merge 看起来就像你想要的那样。

【讨论】:

  • 我在做--remote(见问题),这让我很困惑。我阅读的所有内容似乎都暗示这些命令是等效的,但它们对我而言并非如此
  • @AlexO 啊,刚刚注意到您正在使用两者。您是否尝试将合并排除在外?
  • 是的,它让我在子模块上处于“分离头”状态
【解决方案2】:
git pull origin yourbranch --recursive
cd submodulebrach
git checkout submodulebrach
cd ..
git commit -m submodule
git push origin yourbranch 

【讨论】:

  • 我看不到它是如何回答我的问题的,你能解释一下吗?
  • 问题是问如何干净地更新子模块的本地版本。我不明白你为什么要 OP 在此处推送更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 1970-01-01
  • 2012-04-27
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多