gpt4 book ai didi

git - Makefile中子模块的自动初始化和更新

转载 作者:太空狗 更新时间:2023-10-29 12:54:33 35 4
gpt4 key购买 nike

我有一个包含多个子模块的 git 项目(回想起来我有点后悔这个选择)。它使用 gnu make

目前我希望人们在第一次构建项目之前以及在 pull 任何更新了 a 的更改之后手动发布 git submodule update --init1子模块引用。

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

对于初始的 init 来说,似乎有一个规则就足够了(对于目录 module1 中的子模块:

module1/.git:
git submodule update --init

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

但是,当引用已更新时,更新子模块的效果并不好。我想我可以让子模块依赖于根 .gitmodules 文件,我想当子模块引用更新时它应该改变,比如:

module1/.git: .gitmodules
git submodule update --init

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

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


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

最佳答案

我设计了这样的东西:

.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 只会在需要的时候运行。

关于git - Makefile中子模块的自动初始化和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52337010/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com