简介GitHub是一款常用的代码管理工具,也被戏称为全球最大的程序员交友网站。它的每一次升级都会影响到很多用户。在我个人的github网站上,在做JAVANIOdemo的时候上传了一个自制的大文件。最近对这个项目做了一些修改,但是无法上传到github网站。查看错误原因,就是项目github中存在一个大文件无法上传,现在github提供了一个叫做GitLargeFileStorage(LFS)的工具来替换github中的大文件。那么什么是LFS,我们应该如何使用LFS呢?一起来看看吧。LFS的全称及其安装LFS是GitLargeFileStorage,可以将大文件存储在远程服务器如GitHub.com或GitHubEnterprise上的库中,并在库中保存这些大文件的链接。LFS安装起来相对简单。mac上可以使用如下brew命令:brewinstallgit-lfs安装完成后需要将LFS关联到你的git账号:gitlfsinstall注意lfs需要git版本>=1.8.2下来我们就可以愉快的使用LFS了。LFS的使用模拟github上的大文件,我们可以在github上新建一个仓库,然后执行如下命令添加相应的内容:gitinit.echoHelloWorld>README.mdgitaddREADME.mdgitcommit-m"把“Initialcommit”上面的代码提交到github肯定是没有问题的。为了测试大文件,我们可以使用dd命令创建一个256M的大文件如下:ddif=/dev/urandomof=test.binbs=1024count=262144在github最新版本中,这个文件必须不能上传是的,那么我们应该如何使用LFS呢?lfs提供了如下帮助命令:$gitlfshelp$gitlfs-h这里我们需要使用gitlfstrack命令如下:gitlfstrack'*.bin'上面的例子我们使用的是Wildcard匹配所有以bin结尾的文件。当然,如果你想匹配上面的test.bin文件,你也可以直接使用:gitlfstrack'test.bin'这个命令的目的是利用lfs来跟踪这些bin文件。也可以使用track命令列出lfs的所有跟踪路径:gitlfstrackListingtrackedpaths*.bin(.gitattributes)我们可以使用如下命令查看lsf的具体跟踪文件:gitlfsls-files但是因为你上面创建的bin文件还没有提交,所以这里是看不到的。这些lfs的trace信息保存在项目根目录下的.gitattributes中。我们需要把这个.gitattributes文件一起提交,这样所有checkout这个库的用户都能知道这个lfs服务。当我们提交所有文件后,再使用gitlfsls-files命令,我们可以看到类似下面的内容:d05241dd24b*test.bin表示这个文件已经添加到lfs中了。从LFS中删除文件上面我们解释了如何将文件添加到LFS进行跟踪。如果我们不想使用LFS而是使用传统的git来管理文件怎么办?lfs提供了untrack命令,与track相反,如下:gitlfsuntrack"*file-type"untrack后,记得从git缓存中删除这个文件:gitrm--cached"*file-type"然后重新-添加这个文件到git,提交然后提交:gitadd"*file-type"gitcommit-m"restore"*file-type"togitfromlfs"PullcodefromLFSPullfromLFS获取代码是和传统的普通gitpull代码一样,直接使用gitclone命令即可:gitclonehttps://github.com/username/test_repo.gitdestination_dir将历史数据转换为LFS有时候我们的文件已经在仓库中了,比如,历史上提交的文件很多,如果想转成LFS存储怎么办?lfs提供了一个migrate命令来转储文件。gitlfsmigrate要使用migrate命令,您需要安装GitLFSv2.2.1或更高版本。比如我们要迁移所有的bin文件,我们可以这样写:gitlfsmigrateimport--include="*.bin"以上命令只针对本地分支,如果要迁移远程分支,可以加一个--include-ref参数如下:gitlfsmigrateimport--include="*.bin"--include-ref=refs/heads/master然后强制提交库:gitpush--force最后,上面的命令虽然将历史git对象转换为lfs对象,但是本地.git文件没有变化,所以需要执行如下命令清理.git文件夹:gitreflogexpire--expire-unreachable=now--allgitgc--prune=now总结如果你不使用大文件,那么你就不会使用lfs,如果你的项目中有大文件,那么参考这篇文章。本文已收录于http://www.flydean.com/07-git-largefile/最流行的解读,最深刻的干货,最简洁的教程,很多你不知道的小技巧等着你去探索!欢迎关注我的公众号:《程序那些事儿》,懂技术,更懂你!