LFS 迁移指南

本文目标

本文旨在帮助你快速在 Codeup 仓库中启用大文件存储( LFS )更高效的管理二进制文件,以及为你提供三方代码库迁移到 Codeup 时 LFS 文件的迁移方案。

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

  1. Codeup 仓库启用 LFS

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

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

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

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

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

1.LFS 的安装和基本使用

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

$ git lfs -v

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

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

2.1 Codeup 代码库 - 启用LFS

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

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

$ git clone --bare git@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 管理了。

1

在代码库设置 - 大文件存储的管理页面,我们也能看到 LFS 对象的总体积,类型,提交者等信息。

随后,我们重新克隆一次仓库。执行

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

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

2.2 Codeup 代码库启用LFS - 迁移历史文件至LFS

在很多情况下,我们已经向仓库中已经添加了许多的大文件。开启LFS只会对之后的提交生效,并不会影响这些历史的文件。

那么,如何将这些历史的文件也改用LFS来管理呢?我们可以利用git lfs migrate命令来完成。

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

$ git clone --bare $ git@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来进行管理。

注意

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

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

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

3. 从三方库迁移至 Codeup

3.1 迁移三方库至 Codeup

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

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

  2. 完成后按照上述 2.1,开启 LFS。

3.2 迁移三方库至 Codeup - 并迁移历史文件至 LFS

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

  1. 参考上述2.2中的前三个步骤,迁移本地所有分支的历史提交,但不执行git push的操作。

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

$ git remote add codeup <Codeup仓库地址>

3.执行:

git push --all --force codeup
git push --tags --force codeup

4.打开Codeup的仓库页面,我们应该能看到仓库已经成功上传。

3.3 迁移已经启用了LFS的三方库至 Codeup

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

1.首先,我们执行一次全量的克隆。

$ git clone --bare <其他仓库的地址>

2.然后,我们将 LFS 的文件都下载到本地。

$ git lfs fetch --all origin

3.下载完成后,我们修改仓库的 remote 地址至 Codeup。

$ git remote add codeup git@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 功能简介