使用 TortoiseGit 迁移仓库指南
使用 TortoiseGit(小乌龟) 将仓库完整迁移到另一个 Git 托管平台(如从 GitHub 迁移到 GitLab、Gitee 等),最核心的目标是完整保留所有分支、历史提交记录(Commit History)和标签(Tags)。
推荐使用方法一(纯版本库克隆与推送),这是最规范、能完整保留所有分支与标签的迁移方案。
说明:本指南只迁移 Git 数据(分支、标签、提交历史),不包含 Issues、Pull Request、Wiki、Releases 等平台数据。
迁移前准备
- 在新平台创建完全空白的仓库 :
- 进入新托管平台(如 GitLab、GitHub 等),点击新建仓库。
- 切勿勾选"使用 README 初始化"、"添加 .gitignore"或"选择许可证"。
- 保持仓库完全空白(Empty Repository),并复制其克隆地址(HTTP/HTTPS 或 SSH)。
- 配置认证权限 :
- 确保你拥有新平台的推送权限。
- 如果使用 HTTPS,请准备好个人访问令牌(Personal Access Token / App Token);部分平台(如 GitHub)已不再支持使用账号密码进行 Git 推送。
方法一:纯版本库克隆与推送(推荐,分支与标签最完整)
常规克隆只会创建并检出默认分支(如 main 或 master)的本地分支,其他分支仅以远程跟踪分支(origin/xxx)的形式存在,不会被 Push all branches 一并推送;而纯版本库(Bare Repo)会将原平台的所有分支与标签直接作为本地引用完整下载,因此迁移最完整。
步骤 1:使用 TortoiseGit 克隆为纯版本库
- 在电脑任意空白目录下,点击鼠标右键,选择 Git Clone... (Git 克隆)。
- URL :输入旧托管平台的仓库地址。
- Directory (目录) :系统会自动生成一个文件夹路径(文件夹名一般为仓库名,文件夹名不影响迁移)。
- 关键勾选 :务必勾选界面下方的 Clone into Bare Repo (克隆成纯版本库)。
- 点击 OK (确定) 开始克隆。 验证提示 :克隆完成后打开该文件夹,里面直接是
HEAD、config、objects、refs等文件/文件夹,而看不到具体的项目源码,这说明纯版本库克隆正确,所有分支和标签已完整下载。
步骤 2:推送到新托管平台
- 进入刚刚生成的版本库文件夹内部,在空白处点击鼠标右键(或直接在该文件夹上右键),选择 TortoiseGit -> Push... (推送...)。
- 在弹出的推送窗口中进行设置:
- Destination (目标) :
- 选择单选框 Arbitrary URL (其他 URL) ,在右侧输入框中粘贴新托管平台的空仓库地址。
- Ref (引用) :
- 勾选最上方的 Push all branches (推送所有分支) 。 提示:勾选后,下方的"本地"和"远端"输入框会自动变灰,无需再手动填写。
- Options (选项) :
- 勾选 Include Tags (包括标签)。
- Destination (目标) :
- 点击 OK (确定) 执行推送。
- 在弹出的进度窗口中,如果提示输入新平台的用户名和密码(或访问令牌),按要求输入即可。
- 推送成功后,新平台就会拥有旧仓库的所有分支、标签及完整的提交历史。
步骤 3:后续清理与日常使用
- 迁移完成后,请先确认新平台已包含全部分支与标签,再删除本地那个临时中转的纯版本库文件夹。
- 团队成员需要开发时,直接通过 TortoiseGit 重新 Git Clone... (Git 克隆) 新平台的地址即可;已有本地仓库的成员,也可以按下文方法二的步骤 1,将
origin改为新平台地址。
方法二:直接修改已有本地仓库的 Remote(适合单分支/个人项目)
如果你已有一个正在使用的本地仓库,且项目只有单一分支(如只有 main),可以采用此方法。
注意 :这种方法只会推送存在于你本地的分支 。如果原平台有多个分支,而你本地只检出过
main,则其他分支不会被推送到新平台。如有多个远程分支,务必优先选用方法一。
步骤 1:修改或添加新的远程仓库地址
- 在现有的本地项目文件夹空白处点击右键,选择 TortoiseGit -> Settings (设置)。
- 在弹出的设置窗口中,依次展开 Git -> Remote (远端)。
- 选中默认的
origin,在右侧 URL 输入框中,将旧地址替换为新平台的仓库地址 。 提示 :也可以在 Remote 框中输入一个新名字(如new-origin),填入新地址并点击 Add New/Save,这样可以同时保留新旧两个远程仓库。 - 点击 Apply (应用) 并点击 OK (确定)。
步骤 2:推送代码和标签
- 在项目文件夹空白处右键 -> TortoiseGit -> Push... (推送...)。
- Destination (目标) :确认 Remote 指向新平台(即步骤 1 中修改的
origin,或新增的new-origin);如果跳过了步骤 1,也可以改选 Arbitrary URL (其他 URL),直接填入新地址。 - Ref (引用) :勾选 Push all branches (推送所有分支)。
- Options (选项) :勾选 Include Tags (包括标签)。
- 点击 OK (确定) 推送。
常见问题与避坑指南
- 推送被拒绝(
Updates were rejected... / non-fast-forward) :- 原因 :在新平台创建仓库时,顺手勾选了生成
README.md、.gitignore或 License,导致新旧仓库的起点不一致。 - 解决办法 :最稳妥的做法是删掉新平台上刚建的仓库,重新创建一个完全空白 的仓库;或者在 TortoiseGit 推送对话框的选项中勾选 Force (强制)(前提是新平台未对分支开启保护)。
- 原因 :在新平台创建仓库时,顺手勾选了生成
- 账号密码认证失败 :
- GitHub、GitLab 等平台使用 HTTPS 时,通常需要使用平台生成的个人访问令牌(Personal Access Token) 代替普通登录密码。
- 包含 Git LFS 大文件 :
- 如果旧仓库使用了 Git LFS 管理大型二进制文件,纯版本库克隆通常不会下载 LFS 大文件实体,仅做常规 Git Push 可能导致新仓库缺少指针对应的大文件。请在克隆完成后,于纯版本库目录(方法二则为本地仓库目录)内执行
git lfs fetch --all,推送完成后再执行git lfs push --all <新地址>(新平台需已启用 LFS)。
- 如果旧仓库使用了 Git LFS 管理大型二进制文件,纯版本库克隆通常不会下载 LFS 大文件实体,仅做常规 Git Push 可能导致新仓库缺少指针对应的大文件。请在克隆完成后,于纯版本库目录(方法二则为本地仓库目录)内执行