git - 使用 git 子模块进行可重现的构建(依赖管理)?
问题描述
我正在尝试想出一种方法来处理 Git 项目依赖项,例如 Swift 包管理器。
我想特别说明一下,假设我的应用程序版本 1.2,取决于框架 A,版本 1.0。
然后,当我签出我的应用程序的 v1.2 时,框架代码应自动在标签 v1.0 处拉入。
code/myapp/ tag v1.2
lib/frameworkA tag v1.0
我尝试了 Git 子模块,但是当我签出父应用程序的特定标签时,我无法找到一种自动签出特定子模块标签的方法。
.gitmodules 文件作为父项目的一部分签入。理想情况下,它将包含有关要使用子模块的哪个标签的详细信息。这可能吗?如果没有,是否有另一种不使用子模块的方法?
解决方案
默认情况下,git-checkout
不更新子模块。
submodule.recurse
但是,您可以通过将配置选项设置为从 Git 2.14 更改此行为true
:
submodule.recurse
指定命令是否默认递归到子模块中。这适用于所有具有--recurse-submodules
选项的命令,除了clone
. 默认为假。
从 Git 2.13 开始,git-checkout
有了这个--recurse-submodules
选项,所以你需要做的就是:
git config --global submodule.recurse true
git submodule update --recursive
每当您切换到不同的分支时,Git 都会自动运行。
至于将子模块与特定标签相关联,您可以通过手动签出子模块目录中的标签来完成:
cd path/to/submodule
git checkout <submodule-tag-name>
此时,子模块将指向由<tag-name>
. 然后,您所要做的就是告诉父项目修改后的子模块:
cd path/to/parent/project
git add path/to/submodule
git commit -m "Sets submodule to tag <submodule-tag-name>"
git tag -a <parent-tag-name>
从此时起,每当您<parent-tag-name>
在父项目中签出时,Git 都会自动签出与子模块中关联的提交<submodule-tag-name>
。
推荐阅读
- javascript - 如何在 django rest 框架中使用 CORS?
- javascript - 代码信号上的常见字符计数挑战
- python - ImportError:无法在 conda-build 中导入名称 dist
- git - 如何在预提交挂钩中使用 git diff 的退出代码
- python - 如果输入区间在另一个区间内,则追加到列表
- r - 从位置矩阵为稀疏矩阵创建向量 p
- javascript - 删除@ids 和文本包含来自电报机器人消息的链接
- android - 如何使用 NanoHttpd 开始在 Mi Video 上播放 .mkv 和 .mp4 视频而不读取整个文件(Android)
- r - 当我们在 R 中读取 csv 时,数值带有前缀 X
- .net - 在没有“Key”和“Value”关键字的情况下将包含字典的文档插入到 Cosmos DB