Git子模块没有额外的重量

Iho*_*nov 12 git github git-submodules

我还不是Git大师,面对一个问题,我无法弄清楚如何修复.我有一个我的WordPress自定义骨架的回购,我已经添加了WordPress作为其原始回购的子模块git submodule add wp_repo_url.当我将我的repo克隆到本地机器时:

git clone --recursive https://github.com/user/repo local_dir
Run Code Online (Sandbox Code Playgroud)

它按预期下载了WP子模块​​,但问题是这样 - 实际文件只有20.7Mb,而且.git/modules/core/objects/pack我有一个巨大的124Mb .pack文件,我认为这个文件就像提交该子模块的历史/修订一样.

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

更新:

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

  • 我的骨架repo将WordPress作为一个子模块,整个原始回购与历史
  • 当从骨架创建一个新项目时,我将克隆它而不使用--recursive选项来只获取子文件的主文件和空文件夹
  • 如果我需要具有完整历史记录的WordPress - 例如,如果我需要在不同的WP分支/标签之间切换以测试我的插件/主题向后兼容性 - 那么我将获得具有完整历史记录的子模块
  • 如果我只是需要一个简单的干净安装最近的WP版本,我将改为wp目录并采用旧的方式:

    curl -L -O http://wordpress.org/latest.zip
    unzip latest.zip 
    mv wordpress/* .
    rm latest.zip  
    rm -rf wordpress
    
    Run Code Online (Sandbox Code Playgroud)

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

对原始问题的任何建议表示赞赏.

Von*_*onC 19

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

您需要做的就是在以下位置记录该配置.gitmodules:

git config -f .gitmodules submodule.<name>.shallow true
Run Code Online (Sandbox Code Playgroud)

添加,提交和推送:克隆你的repo的任何人(常规克隆,完整历史记录)将只获得子模块的深度1 <name>.

请参阅Stefan Beller()提交f6fb30a,提交abed000提交37f52e9(2016年8月3日).(由Junio C Hamano合并- -提交dc7e09a,2016年8月8日)stefanbeller
gitster

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

有时,上游项目不会认为子模块的历史很重要.为了使下游用户更容易,允许使用布尔字段' submodule.<name>.shallow' .gitmodules,这可用于建议上游是否认为历史记录很重要.

默认情况下,此字段在初始克隆中受到尊重,可以通过提供--no-recommend-shallow选项将其忽略.