Git-使用嵌套子模块?

Git-使用嵌套子模块?,git,git-submodules,Git,Git Submodules,我有以下git存储库 Vector Random String 字符串依赖于向量,并将其作为子模块添加。 向量子模是随机的。Random没有依赖性 模块:随机 模块:向量 子模块:随机 模块:字符串 子模块:向量 子模块:随机 当我更改随机向量内部的子模块时(不是实际的模块随机),它不会自动更新模块:随机或其他地方存在的子模块随机 当我在向量(模块)中更改某些内容时,它不会更新字符串中的向量。如果我访问存储库中的String,然后键入git pull,它会声明所有内容都是最新

我有以下git存储库

  • Vector
  • Random
  • String
字符串依赖于向量,并将其作为子模块添加。 向量子模是随机的。Random没有依赖性

  • 模块:随机
  • 模块:向量
    • 子模块:随机
  • 模块:字符串
    • 子模块:向量
      • 子模块:随机
当我更改
随机
向量内部的子模块时(不是实际的模块
随机
),它不会自动更新
模块:随机
或其他地方存在的子模块随机

当我在
向量
(模块)中更改某些内容时,它不会更新
字符串
中的
向量
。如果我访问存储库中的
String
,然后键入
git pull
,它会声明所有内容都是最新的。如果我
cd
子模块向量
中,并键入
git pull
,只有这样它才会真正更新我的
子模块向量
。在这一点上,它希望我将更改提交到
String
存储库,即使
String
内部没有任何更改

如果我有一个包含50个子模块的存储库呢?我的子模块将不断地改变,我不想每次我想接触我的项目时都要拉,也不想每次都要拉,因为是子模块改变了。一定有更简单的方法

如中所述,您应该使用,from String(主父回购)a:

最重要的是,它希望我将更改提交到
String
存储库,即使
String
内部没有任何更改

确实发生了一些变化:子模块
向量
的gitlink(repo索引中的特殊条目)

如果您不想每次刷新
字符串的内容时都这样做,而只想执行一次简单的常规
git pull
,请只执行一次:

git config --global fetch.recurseSubmodules true
你可以

类似地,一个简单的git-push-from-String也会推送任何更改的子模块,只要您设置一次:

git config --global push.recurseSubmodules true

每次处理
String
时是否需要执行这两行?我的子模块肯定会不断变化,所以我想为了保持工作状态,我需要在任何类型的工作之前像那样拉动?@hatefind否,您可以自动/配置这些步骤,以便只需从
字符串执行简单的基本
git拉动
。查看我编辑的答案。在我的
模块向量
中,我做了
git pull--recurse submodules=yes
,它正确地注意到
Random
已更改,所以它说
从…
获取子模块。之后,我键入了
git submodule update--recursive
,但似乎什么也没发生。我将
cd
随机放入
子模块中,实际上我的更改不在那里。我做了
git status
,它说我一次提交就落后了。我做了一次常规的git pull,它正确地抓取了更改。知道它为什么不起作用吗?@hatefind当您更改Random时,是否在字符串中添加并提交了内容?否则,您需要配置Random以跟随分支:。然后自动执行的命令变成:
git submodule update--init--recursive--remote
。请参阅@hatefind上的更多内容注意:如果子模块的更改始终在其各自的主分支上,则只需
git子模块更新--init--recursive--remote
:这些子模块不需要特殊配置。至于原因,请参阅中的一个详细用例,作为基础设施的一部分,git保留了子模块使用位置的提交sha(即更新子模块时为什么需要在父模块中提交-您更改了子模块的提交方式!)。这是因为该存储库的每个“客户机”都可以在不同的版本中使用它。如果您不想在添加新功能(和bug)时更改或更新某个客户端,而是希望其他客户端使用最新的功能(和bug),这一点就变得非常重要。
git config --global push.recurseSubmodules true