我正在构建一个需要项目生态系统(linux、qemu、uboot 等)的项目,其中大部分项目位于 git 存储库中。我曾经用脚本来管理它们,但我发现自己实现的东西最好用 make 来完成。所以我决定将我的脚本迁移到一个makefile。
问题是我希望项目在不存在时被克隆,如果存在则被拉出。有没有办法在不重复自己太多的情况下做到这一点?
我正在构建一个需要项目生态系统(linux、qemu、uboot 等)的项目,其中大部分项目位于 git 存储库中。我曾经用脚本来管理它们,但我发现自己实现的东西最好用 make 来完成。所以我决定将我的脚本迁移到一个makefile。
问题是我希望项目在不存在时被克隆,如果存在则被拉出。有没有办法在不重复自己太多的情况下做到这一点?
我认为这样的事情会起作用。它没有做这项工作,因为不依赖项目目录中的某些东西我不确定你只能有条件地运行克隆。
force: ;
proj%: force
@echo [ -d $@ ] || git clone srv:$@
@cd $@ && git pull
如果您想列出类似proj1/.git/config
入口点 prereq 之类的内容,则可以将克隆拆分为仅订购的 prereq,并在项目目录具有克隆的那些上拆分。尽管您仍然需要配置 prereq 上的力来强制拉动发生。
可能是这样的:
proj%:
git clone srv:$@
proj%/.git/config: force | proj%
git pull
我一直在使用 Makefile 来构建带有 PHONY 目标的 docker 图像,并提出了这种模式:
.PHONY all
all: foo-docker
foo:
git clone https://example.org/foo-project.git $@
.PHONY: foo-update
foo-update: foo
@cd foo && git pull
.PHONY: foo-docker
foo-docker: foo-update
@cd foo && docker build