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 已经启用,对应文件也已上传。

    打开代码库页面,可以看到该PNG格式的图片已经被标记为使用LFS管理了。

    高的 (87)

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

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

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

Codeup仓库-启用LFS,并修改历史提交中的文件至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"

    这样,就完成了dev分支的迁移,如果有其他分支,进行类似的操作即可。

  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进行管理

如果其他平台的仓库中,已经有了一些大文件,此时希望迁移仓库至Codeup,同时将历史文件交由LFS管理,可以执行以下操作:

  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 功能简介