Git 没有额外重量的子模块

Git submodule without extra weight

我还不是 Git 大师,遇到了一个我不知道如何解决的问题。我有一个带有我的 WordPress 自定义框架的存储库,并且我已经通过 git submodule add wp_repo_url 从其原始存储库中将 WordPress 添加为子模块。当我使用以下命令将我的存储库克隆到本地计算机时:

git clone --recursive https://github.com/user/repo local_dir

它按预期下载了 WP 子模块,但问题是 - 实际文件只有 20.7Mb,在 .git/modules/core/objects/pack 中我有一个巨大的 124Mb .pack 文件,我想这是 smth比如那个子模块的提交历史/修订。

如何在克隆时重新添加子模块或修改以防止下载这个额外的权重?

更新:

在@iclmam 的帮助下,我想出了以下设置:

这不是一个完美的解决方案(我想尽可能地自动化所有事情),但它现在有效。

如有任何关于原始问题的建议,我们将不胜感激。

如果您将 WP 用作子模块,这意味着您可能需要访问该子模块内的历史记录。这意味着您需要这个包文件。

Git 将数据打包到打包文件中。这是为了提高效率和节省磁盘 space 的目的。参见 Git internal - Packfiles . If you wonder what is in the packfile, you can use the git verify-pack command。与 -v 选项一起使用,您可能会发现一个巨大的文件已放入您的存储库中。

如果出于某些原因你想 'clean' 子模块,我建议你阅读 Why is my repo so big ?

如果你不想要子模块中的完整历史,你可以尝试使用 -depth 选项克隆它(参见 git submodule command),这样它就是一个历史被截断的浅克隆。这可能会减小包文件夹的大小。

1) 在没有递归选项的情况下克隆主仓库

2) 在主仓库中,使用带有 -depth 选项的 git 子模块命令初始化子模块

自 Git 2.10+(2016 年第 3 季度)起,您将能够进行常规克隆...并且仍然受益于 子模块的浅层克隆

您需要做的就是在 .gitmodules:

中记录该配置
git config -f .gitmodules submodule.<name>.shallow true

添加、提交和推送:任何克隆您的存储库(常规克隆、完整历史记录)的人都只会获得子模块的深度 1 <name>

参见 commit f6fb30a, commit abed000 and commit 37f52e9 (03 Aug 2016) by Stefan Beller (stefanbeller)
(由 Junio C Hamano -- gitster -- in commit dc7e09a 合并,2016 年 8 月 8 日)

> submodule update: 学习 --[no-]recommend-shallow 选项

Sometimes the history of a submodule is not considered important by the projects upstream. To make it easier for downstream users, allow a boolean field 'submodule.<name>.shallow' in .gitmodules, which can be used to recommend whether upstream considers the history important.

This field is honored in the initial clone by default, it can be ignored by giving the --no-recommend-shallow option.