总结:
create git 仓库,不带任何附件;
勾选 allow lfs.
bash
git clone --mirror https://github.com/你的用户名/你的仓库.git
cd 你的仓库.git
git lfs fetch --all
git remote set-url origin http://bitbucket.org/你的工作区/你的新仓库.git
git push --mirror
git lfs push --all origin
注意:
1. 服务器上的仓库设置 allow lfs 勾选
否则会出现 类似这样的错误:
batch response: Git LFS is disabled0 B | 0 B/s
batch response: Git LFS is disabled
Uploading LFS objects: 0% (0/1), 0 B | 0 B/s, done.
2.注意使用的网络协议
使用 http协议,ssh 不与 lfs 配合。
git remote set-url origin http://bitbucket.org/你的工作区/你的新仓库.git
迁移一个带有 Git LFS 的仓库,核心挑战是 Bitbucket 自带的导入工具 (Import Tool) 不会导入 LFS 文件对象 -7。因此,手动镜像克隆并推送(Manual Mirror Push)是最可靠、也是官方推荐的方法 -4。
详细操作步骤
在终端中逐条执行以下命令。
1. 镜像克隆 GitHub 仓库
这一步会从 GitHub 把所有东西完整地"复制"到你电脑上,包括所有的分支和标签。
bash
git clone --mirror https://github.com/你的用户名/你的仓库.git
cd 你的仓库.git
2. 拉取所有 LFS 文件
这是最关键的一步。因为普通克隆默认只下载当前版本的文件指针,我们需要显式地把所有 LFS 文件(Git 大文件存储对象)的历史版本也都拉到本地来-2-7。
bash
git lfs fetch --all
这个命令执行完后,你的本地才算真正拥有了 GitHub 上的所有大文件实体。
3. 准备 Bitbucket 仓库
-
登录 Bitbucket,创建一个空的新仓库。
-
不要勾选"创建 README"、".gitignore"或"许可证"等初始化选项,否则会因产生初始提交而导致推送冲突。
-
创建完成后,复制它提供的 HTTPS 或 SSH 地址。
4. 推送至 Bitbucket
现在,我们把本地完整的环境"映射"到 Bitbucket 上。
首先,修改远程仓库地址:
bash
git remote set-url origin https://bitbucket.org/你的工作区/你的新仓库.git
然后,执行推送。这是另一个核心命令,它会将所有引用(分支、标签)和 LFS 对象都推送到 Bitbucket。
bash
git push --mirror
git lfs push --all origin
按照这个顺序执行,可以确保 Git 元数据和 LFS 大文件都能稳定上传-2。
常见问题与注意事项
-
历史中的大文件 :如果你早期的提交里曾有大文件(此时还未使用 LFS),直接迁移可能会遇到大小限制。建议在迁移前先用命令
git lfs migrate import --include="*.zip,*.psd" --everything将历史中的特定文件类型也转交给 LFS 管理-3-9。 -
团队协作中断:迁移操作会重写仓库历史吗?
-
上面演示的标准流程(
clone --mirror+push --all)是无损的。它只是把 GitHub 上的数据完整地复制到 Bitbucket,不会改变提交的 SHA-1 值,因此对团队成员来说是透明的。 -
如果你执行了上一条提到的
migrate命令来重写历史,那所有同事都需要重新克隆仓库,适合在"搬迁窗口期"操作-9。
-
-
验证迁移结果 :推送完成后,可以在 Bitbucket 网页端查看源代码和提交记录。你也可以重新 Clone 一份到新文件夹,运行
git lfs ls-files查看 LFS 文件是否完整-4。 -
保留元数据 :Issues、Pull Requests、Wiki 等数据无法通过 Git 命令迁移。如果这些也需要保留,只能借助 GitHub 和 Bitbucket 的官方导入/导出工具,或者考虑使用第三方迁移服务-4-6。