本文目标
本文旨在帮助你快速在 Codeup 仓库中启用大文件存储( LFS )更高效的管理二进制文件,以及为你提供三方代码库迁移到 Codeup 时 LFS 文件的迁移方案。
分为以下几种情况,请对照实际情况,执行相应的操作:
Codeup 仓库启用 LFS
Codeup 仓库启用 LFS - 并修改历史提交中的文件至 LFS 管理
迁移三方代码库至 Codeup - 启用 LFS
迁移三方代码库至 Codeup - 启用 LFS 并修改历史提交中的文件至 LFS 管理
迁移已经启用了 LFS 的三方代码库至 Codeup 管理
有关LFS的安装,使用和原理等其他细节,请参考Git 大文件存储。
1.LFS 的安装和基本使用
参见如何使用 Git LFS, 安装完成后,可以运行
$ git lfs -v
来查看 LFS 是否正确安装及对应版本。
2.在 Codeup 中使用 LFS 管理二进制文件
2.1 Codeup 代码库 - 启用LFS
假设仓库的历史提交中不存在希望使用 LFS 管理的大文件(二进制文件),或者本身就是从空库开始,那操作会非常简单。以下为如何在一个不需要修改历史提交的 Codeup 库上,开启并使用 LFS 功能。
强烈建议在操作前备份仓库。以下命令用于备份仓库至本地的 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 管理了。
在代码库设置 - 大文件存储的管理页面,我们也能看到 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,那么可以这样操作:
在 Codeup 上导入其他平台的仓库。
完成后按照上述 2.1,开启 LFS。
3.2 迁移三方库至 Codeup - 并迁移历史文件至 LFS
如果其他平台的仓库中,已经有了一些大文件,此时希望迁移仓库至Codeup,同时将历史文件交由LFS管理,可以执行以下操作:
参考上述2.2中的前三个步骤,迁移本地所有分支的历史提交,但不执行
git push
的操作。在执行
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 文件后即结束,不更新远程仓库的引用。
如果出现这样的问题,可以将推送操作分两步执行:
首先使用
git lfs push --all origin
命令,推送LFS文件至服务器。使用
git push --all --no-verify
命令,跳过LFS文件的推送及检查,并更新远程仓库的引用。
关于LFS的更详尽使用说明,请参考 Codeup Git LFS 功能简介。