LFS 迁移指南

本文主要帮助您在Codeup仓库中启用大文件存储( LFS)以更高效地管理二进制文件,并提供第三方代码库迁移到Codeup时的LFS文件迁移方案。

适用场景

分为以下几种情况,请对照实际情况,执行相应的操作:

  • Codeup仓库-启用LFS。

  • Codeup仓库-启用LFS,并修改历史提交中的文件至LFS管理。

  • 迁移第三方代码库至Codeup-启用LFS。

  • 迁移第三方代码库至Codeup-启用LFS,并修改历史提交中的文件至LFS进行管理。

  • 迁移已经启用了LFS的第三方代码库至Codeup管理。

有关LFS的安装,使用和原理等其他细节,请参考Git 大文件存储

LFS 的安装和基本使用

请参见如何使用Git LFS?, 安装完成后,可以运行:

$ git lfs -v

来查看LFS是否正确安装及对应版本。

Codeup中使用LFS管理二进制文件

Codeup 代码库-启用LFS

假设仓库的历史提交中不存在希望使用 LFS 管理的大文件(二进制文件),或者本身就是从空库开始,操作会非常简单。以下为如何在一个不需要修改历史提交的 Codeup 库上,开启并使用 LFS 功能。

  1. 备份仓库:强烈建议在操作前备份仓库。以下命令用于备份仓库至本地的 backup 文件夹:

    $ git clone --bare gi*@codeup.aliyun.com:<组织或组id>/<仓库地址> backup
  2. 进入本地仓库:备份完成后,进入本地已有的仓库,或者重新克隆,作为工作目录。假如我们要将 png 的图片文件使用 LFS 进行管理,执行:

    $ git lfs track "*.png"
    Tracking "*.png"

    然后,向仓库中加入 png 文件,例如:

    $ echo test > test.png
  3. 提交改动:执行 add 以及 commit,并将改动推送到远端仓库。

    $ git add .
    $ git commit -m "使用LFS管理png文件"
    $ git push

    输出中会看到 Uploading LFS objects done 的相关字样,说明 LFS 已经启用,对应文件也已上传。

    打开代码库页面,可以看到 lfs.png 已经被标记为使用 LFS 管理了。

    高的 (87)

    在代码库设置 > 大文件存储的管理页面,也能看到LFS对象的总体积,类型,提交者等信息。随后,重新克隆一次仓库。执行:

    $ git clone gi*@codeup.aliyun.com:<组织或组id>/<仓库地址>

    可以看到,png文件被自动的检出,并不需要额外的操作。

Codeup仓库-启用LFS,并修改历史提交中的文件至LFS管理

在很多情况下,我们已经向仓库中添加了许多大文件。开启 LFS 只会对之后的提交生效,并不会影响这些历史文件。我们可以利用 git lfs migrate 命令来完成历史文件的迁移。

  1. 备份仓库:首先,建议将仓库进行备份:

    $ git clone --bare $ gi*@codeup.aliyun.com:<组织或组id>/<仓库地址> backup

    建议按照分支进行迁移,一次迁移一个分支。

  2. 迁移分支:进入本地仓库目录,执行:

    $ git lfs migrate import --include-ref=master --include="*.png"

    会看到类似的输出:

    migrate: Sorting commits: ..., done.
    migrate: Rewriting commits: 100% (2/2), done.
      master 2d2c813aac4b2247e4b79b3721cca45580f15282 -> 5634c182663a24617bd26d0d82a3966686687173
    migrate: Updating refs: ..., done.
    migrate: checkout: ..., done.

    可以看到,历史的提交已被改写,这样就迁移了 master 分支上的历史 png 文件至 LFS 管理

  3. 迁移其他分支:例如迁移 dev 分支,执行:

    $ git lfs migrate import --include-ref=dev --include="*.png"

    如果有其他分支,进行类似的操作即可。

  4. 推送迁移后的分支和标签:行以下命令,将迁移后的分支和标签推送至远端:

    $ git push --all --force
    $ git push --tags --force

    这样一来,历史的 png 文件也被 LFS 管理起来。之后添加的 png 文件,也会由 LFS 来进行管理。

  5. 如果分支特别多的情况下,可以选择一次性迁移所有分支。执行以下命令可以迁移本地所有分支的历史png图片至LFS管理:

    $ git lfs migrate import --everything --include="*.png"
    说明

    一次性迁移所有分支,可能导致上传文件超时等问题。如果出现类似的问题,建议按照分支逐个迁移。

迁移第三方代码库至Codeup-启用LFS

如果希望迁移其他平台的仓库至Codeup,并且启用LFS,那么可以这样操作:

  1. Codeup上导入其他平台的仓库。

  2. 完成后按照Codeup 代码库-启用LFS,开启LFS。

迁移第三方代码库至Codeup-启用 LFS,并修改历史提交中的文件至LFS进行管理

如果已经在其他平台启用了LFS,此时想要将仓库迁移至Codeup,可以按照以下步骤操作:

  1. 参考Codeup仓库-启用LFS,并修改历史提交中的文件至LFS管理中的前三个步骤,迁移本地所有分支的历史提交,但不执行git push的操作。

  2. 在执行git push操作前,执行:

    $ git remote add codeup <Codeup仓库地址>
  3. 执行:

    git push --all --force codeup
    git push --tags --force codeup
  4. 打开Codeup的仓库页面,就能看到仓库已经成功上传。

迁移已经启用了LFS的第三方代码库至Codeup管理

如果已经在其他平台启用了LFS,此时想要将仓库迁移至Codeup,那么可以按照以下步骤操作:

  1. 首先,执行一次全量的克隆:

    $ git clone --bare <其他仓库的地址>
  2. 然后,将LFS的文件都下载到本地:

    $ git lfs fetch --all origin
  3. 下载完成后,修改仓库的remote地址至Codeup:

    $ git remote add codeup gi*@codeup.aliyun.com:<组织或组id>/<仓库名称>
  4. 然后,推送LFS文件到Codeup:

    $ git lfs push --all codeup
  5. 完成后,接着执行:

    $ git push --all codeup
    $ git push --tags codeup

    这样,就完成了已有LFS仓库迁移至 Codeup 的操作。

重要

如果迁移的LFS文件体积较大,在推送仓库时可能会出现超过服务器连接时长限制等情况。具体表现为 git push 命令推送 LFS 文件后即结束,不更新远程仓库的引用。如果出现这样的问题,可以将推送操作分两步执行:

  1. 首先使用git lfs push --all origin命令,推送LFS文件至服务器。

  2. 使用git push --all --no-verify命令,跳过LFS文件的推送及检查,并更新远程仓库的引用。

关于LFS的更详尽使用说明,请参见 Codeup Git LFS 功能简介