如何用git bundle打包Raspberry Pi Pico SDK主仓库及子模块?
解决Git Bundle打包Pico SDK子模块的问题
Git bundle本身不直接支持自动包含子模块,但可以通过批量脚本一次性打包主仓库和所有子模块,避免手动逐个处理的麻烦,具体步骤如下:
有网络电脑上的打包操作
- 确保你已经完成子模块的初始化和更新(你之前执行的
git submodule update --init已经满足要求) - 执行以下bash脚本,自动生成主仓库bundle、所有子模块的bundle,以及子模块路径映射文件:
#!/bin/bash # 生成主仓库bundle git bundle create ../pico-sdk-main.bundle master # 初始化子模块信息记录文件 SUBMODULE_INFO="../submodules-info.txt" > $SUBMODULE_INFO # 递归遍历所有子模块,生成对应bundle并记录路径信息 git submodule foreach --recursive ' SUB_PATH=$path # 把路径中的斜杠替换为横杠,避免文件名冲突 BUNDLE_NAME="../pico-submodule-${SUB_PATH//\//-}.bundle" git bundle create $BUNDLE_NAME HEAD echo "$SUB_PATH $BUNDLE_NAME" >> $SUBMODULE_INFO '
- 把生成的
pico-sdk-main.bundle、所有pico-submodule-*.bundle文件和submodules-info.txt一起拷贝到无网络的电脑。
无网络电脑上的恢复操作
- 先克隆主仓库bundle:
git clone pico-sdk-main.bundle pico-sdk
- 进入主仓库目录,执行以下脚本完成子模块的恢复:
#!/bin/bash SUBMODULE_INFO="../submodules-info.txt" while read SUB_PATH BUNDLE_NAME; do # 创建子模块目录 mkdir -p $(dirname $SUB_PATH) # 克隆子模块到对应路径 git clone $BUNDLE_NAME $SUB_PATH # 切换到主仓库期望的子模块版本 cd $SUB_PATH git checkout $(git rev-parse HEAD) cd ../ done # 完成子模块关联初始化 git submodule init
备选方案(仅需静态文件时使用)
如果不需要保留Git仓库结构,只是要完整的SDK文件,可以用git archive直接打包所有内容(包括子模块):
git archive --format=tar.gz --prefix=pico-sdk/ --recurse-submodules master > pico-sdk-with-submodules.tar.gz
将生成的压缩包拷贝到无网电脑解压即可。
内容的提问来源于stack exchange,提问作者Angus Comber
相关产品推荐
相关产品推荐

