Git递归更新子模块

tyky79it  于 2023-08-01  发布在  Git
关注(0)|答案(7)|浏览(135)

我的项目结构

ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)

字符串
如何递归地更新子模块?我已经尝试了一些git命令(在ProjectA根目录下)

git submodule foreach git pull origin master


或者是

git submodule foreach --recursive git pull origin master


但无法提取Twig的文件。

qltillow

qltillow1#

git submodule update --recursive

字符串
你可能还想使用--init选项,这将使它初始化任何未初始化的子模块:

git submodule update --init --recursive

  • 注意:在一些旧版本的Git中,如果使用--init选项,可能不会更新已经初始化的子模块。在这种情况下,您还应该运行不带--init选项的命令。
tsm1rwdh

tsm1rwdh2#

我使用的方法是:

git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge origin master

字符串

5q4ezhmt

5q4ezhmt3#

由于子模块的默认分支可能是notmaster(在我的例子中经常发生这种情况),这就是我自动化完整的Git子模块升级的方式:

git submodule init
git submodule update
git submodule foreach 'git fetch origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

字符串

7tofc5zh

7tofc5zh4#

在最近的Git中(我使用的是v2.15.1),下面的代码将递归地将上游子模块的更改合并到子模块中:

git submodule update --recursive --remote --merge

字符串
你可以添加--init来初始化任何未初始化的子模块,如果你想变基而不是合并,可以使用--rebase
您需要在之后提交更改:

git add . && git commit -m 'Update submodules to latest revisions'

cnjp1d6j

cnjp1d6j5#

不如

git config --global submodule.recurse true

字符串
然后忘了它
请参阅the git book documentation

svgewumm

svgewumm6#

您可以将以下内容添加到Makefile

submodule:
    git submodule update --init --recursive
    git submodule foreach 'git fetch origin; git checkout $$(git rev-parse --abbrev-ref HEAD); git reset --hard origin/$$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'

字符串
然后,您可以在每次想要更新子模块时简单地运行make submodule

wnavrhmk

wnavrhmk7#

我有一个子模块导致了问题(Sanandrea报告的'fatal:...',上面)。导航到子模块并使用'git clean -dfx'解决了它。

相关问题