如何通过Bitbucket Pipelines将含大文件的仓库从Bitbucket同步备份到GitHub
问题根因
GitHub对普通Git提交的单文件大小限制为100MB,超出该大小的文件无法直接通过普通git push推送到仓库,必须使用Git LFS(大文件存储)服务存储超大型文件。
解决方案
你需要在两端仓库配置Git LFS,同时修改Bitbucket Pipelines配置适配LFS推送,具体步骤如下:
步骤1:Bitbucket源仓库配置LFS
- 本地安装Git LFS工具后,进入仓库本地目录执行初始化命令:
git lfs install - 追踪所有超大型文件,示例如下(可根据实际文件后缀调整规则):
git lfs track "*.bundle" git lfs track "*.deb"
- 将生成的
.gitattributes配置文件提交并推送到Bitbucket仓库:
git add .gitattributes git commit -m "chore: 配置Git LFS追踪大文件" git push
- 如果大文件已经存在于历史提交中,需要执行迁移命令将历史中的大文件批量转为LFS存储:
git lfs migrate import --include="*.bundle,*.deb" --everything
迁移完成后强制推送到Bitbucket即可,如果是多人协作仓库,需要通知所有成员拉取最新的仓库分支,避免提交冲突。
步骤2:GitHub目标仓库配置
- 确保目标GitHub仓库已开启Git LFS功能(GitHub所有仓库默认开启LFS支持,无需额外手动开启)。
- 确认Bitbucket Pipelines使用的SSH公钥已经添加到你的GitHub账户的SSH密钥列表中,拥有仓库的读写权限。
步骤3:修改Bitbucket Pipelines配置
更新bitbucket-pipelines.yml配置如下:
clone: depth: full lfs: true # 开启LFS完整克隆 pipelines: default: - step: image: atlassian/default-image:3 # 内置Git LFS环境,无需额外安装 script: - git lfs install - git lfs fetch --all # 配置LFS推送目标地址 - git config lfs.url https://github.com/gitusername/repo.git/info/lfs # 推送全部分支代码 - git push --force git@github.com:gitusername/repo.git --all # 推送全部LFS对象 - git lfs push --all git@github.com:gitusername/repo.git
可选替代方案
如果不需要在备份仓库中保留大文件,可以使用git filter-repo工具彻底删除仓库历史和当前版本中的所有大文件,无需配置LFS即可完成同步。
注意事项
- GitHub免费版默认提供1GB LFS存储额度和1GB/月的LFS流量额度,超出额度需要购买额外的LFS资源包。
- 首次开启LFS并同步历史提交后,后续的增量提交会自动适配LFS规则,无需手动调整。
内容的提问来源于stack exchange,提问作者Hemant Sharma
相关产品推荐
相关产品推荐

