git - 排除子模块的子模块
问题描述
我有 git repo,我在extern/
dir 中使用 git 子模块链接我的一些依赖项。假设我有一个A
作为子模块的依赖项,位于extern/A
. 现在A
它本身有一些依赖项作为 git 子模块。在A
's repo 中,也就是说,例如。A/test/data/X
.
现在,当我克隆我的 repo 并运行git submodule update --init --recursive
时,为了在 CI 服务器上构建它,或者永远,我希望上面的命令忽略exter/A/test/data/X
,因为它就像 1G 的数据,我不想要。
但是,我的其他依赖项有一些有用的子模块,所以我不能跳过--recursive
. 有没有办法做到这一点?
解决方案
您可以使用submodule.<name>.update
配置变量来设置应更新的子模块,如此处所述
如何从更新中排除特定的 git 子模块?.
如果要排除 A 中的子模块 X,则可以使用以下命令:
git -c submodule."X".update=none submodule update --init --recursive
注意:这假设 repo A 中的子模块 X (它是 extern 的子模块)在整个 repo extern 中是唯一的(包括它的所有子模块,以及它们的子模块等等......)如果 X 不是唯一的,那么所有名为 X 的子模块将在 repo extern 中被跳过。
您可以使用以下命令在克隆过程中跳过子模块:
$ git -c submodule."X".update=none clone --recurse-submodules <repository>
如果子模块位于存储库下的目录中,则相对于其存储库的相对路径应包含在子模块名称中。为避免任何混淆,您可以从.gitmodules
存储库中的文件中获取子模块名称。
考虑以下示例.gitmodules
文件,
[submodule "path/to/submodule_X"]
path = path/to/submodule_X
url = https://github.com/<user>/<repo>
[submodule "Y"]
path = Y
url = https://github.com/<user>/<repo>
如果您想跳过子模块 X,则将<name>
in替换submodule.<name>.update
为 this "path/to/submodule_X"
。这同样适用于嵌套子模块。
推荐阅读
- scikit-learn - AdaBoost 如何结合决策树得出预测?
- javascript - 想要将动态值传递给另一个函数,然后将其保存到数据库
- wordpress - post.preview 输出末尾的斜线
- java - java simpleDateFormat.parse("Tue, 27 Apr 2021 18:00:00 +0200") 导致 ParseException "unparsable Date" - 为什么?
- python - QQmlApplicationEngine 加载组件失败,无法为模块加载插件“QtQuick, qtquick2plugin.dll: Thespecifiedmodulecould not be found
- amazon-web-services - aws elastcisearch 身份验证错误并显示 403
- sortablejs - 在 Vue.Draggable 和 Sortablejs 中设置 .sortable-drag 元素的样式
- go - 有没有办法使用反射来识别 Go 中的类型关系?
- c++ - 从 std::any 序列化的通用函数
- vue.js - Noob:在 vue 组件的插槽中修改(剥离)html