首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Makefile中自动初始化和更新子模块?

在Makefile中自动初始化和更新子模块?
EN

Stack Overflow用户
提问于 2018-09-27 06:49:14
回答 1查看 0关注 0票数 0

我有一个带有几个子模块的git项目(回想起来我有点后悔的选择)。它使用gnumake

目前我希望人们在第一次构建项目之前手动发出git submodule update --init1,并且在提取任何更新子模块引用的更改之后。

但是,我希望Makefile在需要时自动发出这些命令。如果他们有时在不需要时发出命令(虚假更新),这是可以的 - 但它不应该经常发生。

对于初始init,似乎有足够的规则(对于存在于目录中的子模块module1

代码语言:javascript
复制
module1/.git:
    git submodule update --init

在这里选择.git作为“表示”子模块的文件是相当随意的,它可能是一些其他文件。

但是,在更新引用时更新子模块效果不佳。我想我可以让子模块依赖于根.submodules文件,我想在子模块引用更新时应该更改,例如:

代码语言:javascript
复制
module1/.git: .submodules
    git submodule update --init

在这里使用.git似乎是错误的:可能是在update运行时不一定直接更新(特别是如果没有更新此特定子模块),这将使更新命令每次都运行。

在这里寻找更清洁的解决方案。

1或者可能--recursive在初始化上使用参数clone,这具有相同的效果。

EN

回答 1

Stack Overflow用户

发布于 2018-09-27 16:22:08

我制作了这样的东西:

代码语言:javascript
复制
.PHONY: check-and-reinit-submodules
check-and-reinit-submodules:
    @if git submodule status | egrep -q '^[-]|^[+]' ; then \
            echo "INFO: Need to reinitialize git submodules"; \
            git submodule update --init; \
    fi

它正在使用git submodule status,以确定子模块是否未初始化(-在开始时)或以某种方式修改/过时(+在开始时)。此make目标将始终运行,但git submodule update --init仅在需要时运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档