本文主要帮助您快速在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功能。
强烈建议在操作前备份仓库。以下命令用于备份仓库至本地的 backup 文件夹:
$ git clone --bare gi*@codeup.aliyun.com:<企业或组id>/<仓库地址> backup
备份完成后,进入本地已有的仓库,或者重新克隆,作为工作目录。假如要将PNG的图片文件使用LFS进行管理,可以执行:
$ git lfs track "*.png" Tracking "*.png"
之后,可以向仓库中加入PNG文件,例如:
$ echo test > test.png
改动完成之后,执行add以及commit,并将改动推送到远端仓库。
$ git add . $ git commit -m "使用LFS管理png文件" $ git push
会在输出中看到
Uploading LFS objects done
的相关字样,说明 LFS 已经启用,对应文件也已上传。打开代码库页面,可以看到该PNG格式的图片已经被标记为使用LFS管理了。
在代码库
的管理页面,也能看到LFS对象的总体积,文件类型,操作人等信息。随后,重新克隆一次仓库。执行:$ git clone gi*@codeup.aliyun.com:<企业或组id>/<仓库地址>
可以看到,png文件被自动的检出,并不需要额外的操作。
Codeup仓库-启用LFS,并修改历史提交中的文件至LFS管理
在很多情况下,已经向仓库中已经添加了许多的大文件。开启LFS只会对之后的提交生效,并不会影响这些历史的文件。那么,如何将这些历史的文件也改用LFS来管理呢?可以利用git lfs migrate
命令来完成。
首先,还是建议将仓库进行备份:
$ git clone --bare $ gi*@codeup.aliyun.com:<企业或组id>/<仓库地址> backup
建议按照分支来进行迁移,一次迁移一个分支。
进入本地仓库目录,执行:
$ 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管理。
接着,再迁移dev分支,执行:
$ git lfs migrate import --include-ref=dev --include="*.png"
这样,就完成了dev分支的迁移,如果有其他分支,进行类似的操作即可。
迁移完成后,执行以下命令,将迁移后的分支和标签推送至远端:
$ git push --all --force $ git push --tags --force
这样一来,历史的png文件也被LFS管理起来。之后添加的png文件,也会由LFS来进行管理。
如果分支特别多的情况下,可以选择一次性迁移所有分支。执行以下命令可以迁移本地所有分支的历史png图片至LFS管理:
$ git lfs migrate import --everything --include="*.png"
说明一次性迁移所有分支,可能导致上传文件超时等问题。如果出现类似的问题,建议按照分支逐个迁移。
迁移第三方代码库至Codeup-启用LFS
如果希望迁移其他平台的仓库至Codeup,并且启用LFS,那么可以这样操作:
在Codeup上导入其他平台的仓库。
完成后按照Codeup 代码库-启用LFS,开启LFS。
迁移第三方代码库至Codeup-启用 LFS,并修改历史提交中的文件至LFS进行管理
如果其他平台的仓库中,已经有了一些大文件,此时希望迁移仓库至Codeup,同时将历史文件交由LFS管理,可以执行以下操作:
参考Codeup仓库-启用LFS,并修改历史提交中的文件至LFS管理中的前三个步骤,迁移本地所有分支的历史提交,但不执行
git push
的操作。在执行
git push
操作前,执行:$ git remote add codeup <Codeup仓库地址>
执行:
git push --all --force codeup git push --tags --force codeup
打开Codeup的仓库页面,就能看到仓库已经成功上传。
迁移已经启用了LFS的第三方代码库至Codeup管理
如果已经在其他平台启用了LFS,此时想要将仓库迁移至Codeup,那么可以按照以下步骤操作:
首先,执行一次全量的克隆:
$ git clone --bare <其他仓库的地址>
然后,将LFS的文件都下载到本地:
$ git lfs fetch --all origin
下载完成后,修改仓库的remote地址至Codeup:
$ git remote add codeup gi*@codeup.aliyun.com:<企业或组id>/<仓库名称>
然后,推送LFS文件到Codeup:
$ git lfs push --all codeup
完成后,接着执行:
$ 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 功能简介。