如何将本地Git仓库全部分支、标签推送至隔离网络内部Git服务器
物理隔离网络Git全仓库完整迁移操作步骤
你当前已经完成外网仓库克隆、物理摆渡、内网空仓库创建的前提下,按以下命令执行即可完成全量内容推送,覆盖内网空仓库的所有内容:
- 进入本地已克隆的内核仓库目录
cd /path/to/your/local/linux-kernel-repo
- 同步所有远程分支到本地(普通
git clone默认仅拉取默认分支的本地副本,其余分支仅存在远程跟踪记录,执行该命令可确保所有分支都转为可推送的本地分支)
git branch -r | grep -v '\->' | sed 's/origin\///' | xargs -I {} git branch {} origin/{}
- 删除原外网远程源,避免误操作向外网地址推送
git remote remove origin
- 添加内网已创建的空仓库为新的远程源,地址从内网Gitlab/Bitbucket的仓库详情页获取,支持SSH或HTTP(S)格式
git remote add origin <你的内网仓库Git访问地址> # 示例:git remote add origin git@internal-git.local:os/linux-kernel.git
- 执行全量强制推送,把所有分支、所有标签、全部提交记录推送到内网仓库,完全覆盖目标仓库内容
# 推送全部分支 git push origin --all --force # 推送全部标签 git push origin --tags --force
优化方案(后续迁移其他仓库可参考)
如果还在外网环境准备迁移阶段,直接使用镜像克隆方式拉取仓库,后续推送步骤更简单,不需要额外同步分支:
外网环境执行镜像克隆,得到的裸仓库包含所有分支、标签、提交记录,无多余工作区:
git clone --mirror https://外网仓库地址摆渡到内网后,进入镜像仓库目录,添加内网远程地址后直接执行镜像推送即可一步完成全量同步:
cd /path/to/repo.git git remote add origin <内网空仓库地址> git push --mirror --force
注意事项
- 命令中带
--force参数是因为需求明确要求完全替换内网仓库内容,若目标仓库有需保留的内容请勿加该参数 - 若使用HTTP(S)协议推送,按提示输入内网Git平台的账号密码即可;若使用SSH协议,提前将当前操作机器的SSH公钥添加到内网Git平台的个人账号SSH密钥列表中
- 推送完成后可在内网Git的Web页面核对分支数、标签数,和外网原仓库确认一致性
内容的提问来源于stack exchange,提问作者user3696153
相关产品推荐
相关产品推荐

