我有一个带有几个子模块的git项目(回想起来我有点后悔的选择)。它使用gnumake
目前我希望人们在第一次构建项目之前手动发出git submodule update --init
1,并且在提取任何更新子模块引用的更改之后。
但是,我希望Makefile在需要时自动发出这些命令。如果他们有时在不需要时发出命令(虚假更新),这是可以的 - 但它不应该经常发生。
对于初始init
,似乎有足够的规则(对于存在于目录中的子模块module1
:
module1/.git:
git submodule update --init
在这里选择.git
作为“表示”子模块的文件是相当随意的,它可能是一些其他文件。
但是,在更新引用时更新子模块效果不佳。我想我可以让子模块依赖于根.submodules
文件,我想在子模块引用更新时应该更改,例如:
module1/.git: .submodules
git submodule update --init
在这里使用.git
似乎是错误的:可能是在update
运行时不一定直接更新(特别是如果没有更新此特定子模块),这将使更新命令每次都运行。
在这里寻找更清洁的解决方案。
1或者可能--recursive
在初始化上使用参数clone
,这具有相同的效果。
发布于 2018-09-27 16:22:08
我制作了这样的东西:
.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
仅在需要时运行。
https://stackoverflow.com/questions/-100008882
复制相似问题