【问题标题】:submodule in git not added and showing [modified content]未添加 git 中的子模块并显示 [修改内容]
【发布时间】:2019-03-12 15:05:37
【问题描述】:

repo 是一个 Android 项目,并使用名为 volley 的子模块。我正在尝试在修改后将其添加到 git 中。我关注this并执行:

git submodule foreach --recursive git add -A .

但是没有添加子模块。在终端上运行上述 cmd 后我得到了这个:

Entering 'app/modules/volley'

然后没有添加新文件。我在这里做错了什么?

【问题讨论】:

    标签: git git-submodules


    【解决方案1】:

    子模块的(modified content) 注释不区分跟踪内容的未添加和添加更改,这会让人感到困惑,直到您意识到为什么这种区别在这里无关紧要。

    当你 git add 一个子模块时,你添加的是它当前的提交 ID。这就是稍后应该在子模块路径中恢复的内容,在其他 repos 的其他签出中:那个提​​交,具有那个 id 的提交。在您自己的提交中记录的所有内容都是应该在其中查找并签出的子模块提交的 id。如果你愿意。

    所以git status 告诉您您有一些尚未提交的新子模块内容。 Git 允许您提交添加的 aka 缓存 aka 索引 aka 暂存内容,而无需考虑工作树中的任何后续更改,这会使人们感到困惑甚至愤怒,直到他们在您可以的事情上大踏步前进,但是当您添加 aka stage aka cache 等子模块时,添加的内容只是子模块提交 id:如果您在该子模块的工作树中创建新历史记录,则其中有一个必要的小步骤,您必须添加 和提交您的新内容,以便您可以在主索引中暂存子模块的新提交 ID。

    因此,无论您是否 git added 子模块内的新跟踪内容对于使用该子模块的 repos 而言都无关紧要,重要的是您是否已提交它们,git status 告诉您您有未提交的更改在那里跟踪内容。

    您实际上需要 cd 进入该子模块并(添加,但您已经这样做了,并且)提交其新内容。然后你可以在提交之前在主仓库的索引中记录新的子模块提交的 id(“对不起,你的内容在另一个城堡”行)。 git submodule update --init --recursive 不是默认值是有原因的。

    【讨论】:

      【解决方案2】:

      只需手动进入该子模块,并检查其git status:如果没有文件被修改,git add -A 不会添加任何内容。

      或者,如said here,修改后的内容可能是子模块内的嵌套repo,将被忽略。

      【讨论】:

      • 如何处理嵌套repo?我应该更改远程网址吗?
      • @Abrar 首先,您在子模块中看到嵌套的 re 了吗? (一个包含 .git 子文件夹的文件夹?)
      • 是的,“git remote -v”也显示了不同的来源
      • @Abrar 您是否需要子模块中的嵌套存储库? (再次仔细检查,我们不是在谈论子模块本身,而是在子模块文件夹中的一个 repo,它本身就在你的父 repo 中)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2020-02-29
      • 2017-10-21
      • 1970-01-01
      • 2011-07-02
      相关资源
      最近更新 更多