Git 到 LFS 的 BitBucket 迁移问题

Git to BitBucket migration issues with LFS

我们将存储库从 Gitea 服务器迁移到 BitBucket。当我们尝试通过 HTTPS 克隆时,我们收到以下错误:

Error downloading object: : Smudge error: Error downloading : Object does not exist on the server: [404] Object does not exist on the server.

我关注了 this SO answer 并且我可以克隆,但是当我做 git lfs pull 我得到一堆

[404] Object does not exist

然后我尝试了 然后 git lfs pull 结果是

Repository or object not found: /objects/batch, Check that it exists and that you have proper access to it.

在那之后,我看到一些关于 LFS 和 HTTPS 问题的帖子,所以我尝试使用 SSH 进行克隆。 (创建新的 SSH 密钥,将其添加到 BitBucket 等)这导致

error: external filter 'git-lfs filter-process' failed, fatal: : smudge filter lfs failed, warning: Clone succeeded , but checkout failed.

然后我尝试 运行ning git lfs install --skip-smudge 并通过 SSH 再次克隆。这再次起作用,但是文件不可访问,当我 运行 git lfs pull 现在我多次收到以下消息:

batch request: git@bitbucket.org: Permission denied (publickey).: exit status 255

我该如何解决这个问题?

Bitbucket 的导入工具似乎无法导入 LFS 对象。 I ended up following the steps here to fix the problem(请注意,我更新了第 9 步以包含 origin 以修复错误)。

  1. 首先,在 Bitbucket 上创建一个新的存储库,并记下新存储库的 URL(或 SSH 端点)。 (我没有这样做,因为我正在修复我已经创建的回购协议

  2. 在终端 window 中,从 GitHub:

    克隆现有项目
    git clone <URL>
    
  3. 通过 运行:

    使用来自 GitHub 远程的元数据(分支名称、标签等)更新您的本地存储库
    git fetch --all
    
  4. 在将 repo 迁移到 Bitbucket 之前,我们需要确保在这台机器上本地我们已经检查了所有远程分支并将它们放在我们的本地 repo 中。要做到这一点是一个简单的 shell 脚本,它将 repo 的每个分支检出到您的本地机器。

    for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
    
  5. (可选)如果您使用 Git LFS 处理大文件,那么您还需要获取并下载存储库中托管的任何 LFS 文件。您可以通过此命令执行此操作:

    git lfs fetch origin --all
    
  6. 现在您已准备好将存储库推送到新的 Bitbucket 地址。首先,我们需要将本地 Git 存储库中的远程引用更改为新的 Bitbucket 端点:

    git remote set-url origin <BitBucket repo address>
    
  7. 在此之后,我们执行 git 推送以将所有分支推送到 Bitbucket 上的远程:

    git push --all
    
  8. 我们还没有完成。 git 推送不会推送您当前存储库中可能拥有的所有标签。为确保标签也得到迁移,请执行以下命令:

    git push --tags
    
  9. (可选)最后,如果您使用的是Git LFS,我们需要将我们在第5步中下载的所有LFS文件推送到新的repo。通过执行以下命令来执行此操作:

    git lfs push origin --all
    

完成这些步骤后,我们能够无误地克隆并访问 LFS 文件。