
本文详细记录了仓库迁移的三个关键步骤。首先,在SaaS端创建空白仓库,并生成具有内容读写权限的个人访问令牌(PAT)。其次,通过git clone --bare命令下载旧仓库的Git数据库,并利用git push --mirror将完整代码及历史记录镜像推送到新仓库。最后,在本地开发环境中执行git remote set-url命令更新远程仓库地址,经git fetch验证无误后即完成迁移工作。
背景:公司本来是自建的Github企业版,但是开了SaaS的Github企业版。有人联系我让我将仓库进行迁移。
新建一个仓库,确认不添加README,.gitignore和许可文件。

在新的SaaS企业版的Github上新建个人访问令牌。

使用细化权限的令牌(Fine-Grained Token)。

因为我只是希望能推代码到仓库里,所以选择了Content的读写权限。

新建一个临时文件夹,克隆旧项目的Git数据库。
bash> git clone --bare https://old_project_url
# 克隆下来的文件结构
Directory: C:\temp_folder\项目
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2026/2/4 17:25 hooks
d---- 2026/2/4 17:25 info
d---- 2026/2/4 17:25 objects
d---- 2026/2/4 17:25 refs
-a--- 2026/2/4 17:25 175 config
-a--- 2026/2/4 17:25 73 description
-a--- 2026/2/4 17:25 23 HEAD
-a--- 2026/2/4 17:25 105 packed-refs
将Git数据库推到新的仓库,等有验证的弹窗的时候,就得上刚才生成的令牌了。

bash> git push --mirror https://new_project_url
Enumerating objects: 730, done.
Counting objects: 100% (730/730), done.
Delta compression using up to 8 threads
Compressing objects: 100% (286/286), done.
Writing objects: 100% (730/730), 673.26 KiB | 42.08 MiB/s, done.
Total 730 (delta 399), reused 730 (delta 399), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (399/399), done.
To https://new_project_url
* [new branch] master -> master
这时再查看你的Github EMU的仓库,代码已经在那了。
更新远端仓库的名字,查看更新是否成功。最后尝试fetch一下,如果没有报错,就证明迁移成功了。
bash> git remote set-url origin https://new_project_url > git remote -v origin https://new_project_url (fetch) origin https://new_project_url (push) > git fetch origin
本文作者:潘晓可
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!