git - 如何在给定标签处添加浅 git 子模块

标签 git git-submodules git-tag

我想在我的项目中包含一个大型 git 存储库作为子模块。为了减少项目中开发人员的下载时间,我想添加子模块,以便在克隆时仅检索一个版本。另外,我需要的版本是标有标签的旧版本。

添加模块或设置新克隆时如何实现此目的?

最佳答案

该标签实际上是提交的人类可读版本,当您将子模块添加到项目时,您添加到的项目将在该提交哈希处存储子模块的状态。它并不指向 HEAD而是添加子模块时提交的确切时间点。

例如,game-music-emu @ 21a064e位于 21a064e 的精确提交处,这就是子模块默认的工作方式。

如果提交存在于默认(例如 master )分支中,则 --depth 1应该只为您提供您正在查找的标签的提交历史记录。另一方面,默认行为是带来默认(例如 master )分支的所有提交历史记录,这就是浅层或 --depth 1 的原因。需要作为子模块命令的一部分。这就是默认情况下克隆 git 存储库的方式。

您可以使用 git add path/to/submodule 保存子模块当前所在的提交。注意,子模块和它所在的父文件夹是两个独立的存储库!

注意...如果提交存在于另一个分支上,git submodule add还支持--branch选项和文档指出 .gitmodules文件将包含 branch = somebranchname 的条目,但是在测试中,git 1.9.1 似乎并不支持这一点,并且无论如何都会使用默认(例如 master )分支。

因此,为了回答这个问题,为了让开发人员更快地完成此任务,请在构建系统中编写一个帮助程序脚本,以使用 git submodule 自动在较浅的深度 pull 入子模块。与 --depth 结合参数,或者更新您的文档以指定 --depth 1因此加快克隆时间。

最后,git submodule还支持foreach [--recursive] <command>选项将允许在每个子模块上执行自定义命令。

这是我正在 cmake 中处理的一个示例,用于在整个项目的浅深度进行延迟获取。 https://gist.github.com/tresf/263ea897036fa762674d489c8d457d68

关于git - 如何在给定标签处添加浅 git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34829824/

相关文章:

git - 如何使 git repo 的子文件夹与另一个 git repo 的子文件夹保持同步

java - 每次 git 推送都会删除未跟踪的文件

git pull 文件给出 500 错误

git-tag - 如何使用 GitHub Mac 应用程序标记我的 git 存储库?

git - 当在同一个提交上推送新标签时,jenkins 不会触发构建

git - Jenkins 无法连接到存储库

git 按子文件夹拆分存储库并保留所有旧分支

git - 在 .gitmodules 中找不到路径 xx 的子模块映射

git - 轻量级标签可以转换为带注释的标签吗?

git submodule sync 命令 - 它有什么用?