如何将本地Git项目(http://xyz.git)推送至离线GitLab保留提交历史
离线迁移Git项目至本地GitLab(保留全量提交历史)操作步骤
- 前置校验:确认本地仓库携带完整历史
进入本地项目的根目录,首先确认目录下存在.git隐藏文件夹:如果是通过Bitbucket页面下载的源码zip包,是不带这个目录和提交历史的,这种场景无法保留历史,必须提前在有网络的环境下通过git clone命令拉取完整仓库再转移到离线环境。
执行以下命令确认仓库不是浅克隆:git rev-parse --is-shallow-repository
返回false即为携带全量历史的完整仓库,可继续后续操作;返回true则说明是浅克隆,需要补全历史后再操作。可执行git log翻查最早的提交记录,确认历史符合预期。 - 步骤1:在离线GitLab创建空白目标仓库
登录本地部署的GitLab服务,在对应命名空间下创建新的空白仓库,不要勾选初始化README、开源许可证、.gitignore模板选项,避免生成额外初始提交导致后续推送冲突。创建完成后复制该仓库的内网访问地址(支持SSH/HTTP协议,选你本地网络能连通的即可)。 - 步骤2:配置本地仓库的远程地址
在本地项目根目录执行命令查看现有远程配置:git remote -v
输出内容默认会显示原指向Bitbucket的origin远程地址,可根据需求选择配置方式:- 不需要保留原Bitbucket远程地址:直接替换origin地址
git remote set-url origin 你刚复制的GitLab空白仓库地址 - 需要保留原Bitbucket远程配置用于溯源:新增一个独立的远程源,比如命名为gitlab
git remote add gitlab 你刚复制的GitLab空白仓库地址
- 不需要保留原Bitbucket远程地址:直接替换origin地址
- 步骤3:镜像推送全量仓库内容
执行带--mirror参数的推送命令,该命令会将本地所有分支、标签、提交记录、引用完全同步到目标远程仓库,不会丢失任何历史:
如果你替换了origin地址,执行:git push --mirror origin
如果你新增了名为gitlab的远程源,执行:git push --mirror gitlab
等待命令执行完成无报错即推送完成。 - 步骤4:迁移结果校验
打开GitLab上的目标项目页面,核对分支总数、标签总数、提交数量、最早提交记录是否和原Bitbucket仓库一致,随机点开几条历史提交查看变更内容是否正常,确认所有历史完整保留即迁移完成。
注意:
--mirror为强制镜像覆盖参数,推送时会完全覆盖目标远程仓库的所有内容,必须保证目标GitLab仓库是完全空白、无任何提交的状态,避免丢失已有数据。
内容的提问来源于stack exchange,提问作者deepak
相关产品推荐
相关产品推荐

