赞
踩
Git LFS 全名 Git Large File Storage,是Github带头在2015年推出的解决方案。
Git仓库大了怎么办?
文件大了不敢放?
音视频担心占用空间?
GitHub拉代码慢?
顺手广告目前国内的2款免费仓库:
一、下载并安装Git LFS拓展
GIT LFS下载:官网下载页
注意:Windows用户的Git客户端推荐使用2.16+的版本,如果版本太低可能无法使用lfs
根据安装向导安装下载的 .exe 包后,启动一个新的cmd命令行窗口;执行以下命令:
git lfs install
下载完压缩包后,打开命令行进入下载文件所处的目录,并执行以下命令:
tar xf git-lfs-.tar.gz
cd git-lfs-
sudo ./install.sh
也可使用内置支持Git LFS的客户端,例如SourceTree
brew install git-lfs
git lfs install
二、初始化Git LFS
执行命令:git lfs install PS:其实上面已经做过,再次执行会提醒,略过此步骤。。。
三、应用lfs(从下面的1、2、3、4选择适合自己的情况继续阅读)
转到文章末尾查看:备用2、获取仓库
在远程git控制台上创建项目,复制其仓库地址
进入本地项目文件夹,打开git base窗口,windows尽量不要用cmd(有些命令不支持)
git init
git remote add origin 仓库地址
转到文章末尾查看:备用1、配置想要加入LFS托管的文件规则(一定要先执行这一步,否则还得删库从头再来一遍)
git add .
git commit -am"皮哥wangji5850提醒你,此处是注释信息"
git push -u origin master
以后就正常的编辑本地文件,然后 git add .,git commit,git push即可
同2.的操作;git push的时候,会看到Uploading LFS objects,说明引入OK。By the way,腾讯工蜂的速度可以的!大赞。有种feeling叫:借问寂寞何处了,隔壁老王帮你忙~~~
进入本地项目文件夹,打开git base窗口,windows尽量不要用cmd(有些命令不支持)
git status 确定是否还要提交文件到旧仓库
git remote set-url origin 新仓库地址 (这里有其他remove、add命令,依据个人喜好使用。)
转到文章末尾查看:备用1、配置想要加入LFS托管的文件规则(一定要先执行这一步,否则还得删库从头再来一遍)
git add .
git commit -am"皮哥wangji5850提醒你,此处是注释信息"
git push -u origin master
恭喜你,lfs成功引入。
备用1、配置想要加入LFS托管的文件规则
如果你无需使用git lfs,请返回,不要往下看
git lfs track “.png" ".jpg” “.gif" ".psd” “.sketch" ".xls” “.xlsx" ".rar” “.zip" ".pdf”
git lfs track (用来检查是否track成功,如下图代表OK)
例如:
UI设计稿通常会比较大,我们将目录下所有的. “.png" ".jpg” “.gif" ".psd” “.sketch" ".xls” “.xlsx" ".rar” ".zip" ".pdf"文件添加,使其被LFS托管;这样就不会占用版本库大小:
备用2、获取仓库
如果自己的相关工作不涉及到被 Git LFS 所管理的文件的话,可以选择只获取 Git 仓库自身的内容,而完全跳过 LFS 对象的获取。(同样使用于其他 git 命令,如 checkout, reset 等。)
GIT_LFS_SKIP_SMUDGE=1 git clone 仓库地址
或
git -c filter.lfs.smudge= -c filter.lfs.required=false clone 仓库地址
git clone 仓库地址
注意:如果本地没有安装git lfs且只clone了仓库本身,git pull只能获取仓库本身而不获取任何 LFS 对象
git clone xxx
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
git lfs fetch
git lfs checkout
或 git lfs pull
备用3、暂无
ps:鉴于个人经验有限,所有观点,如有异议,请直接回复讨论(请勿发表攻击言论)。
加入QQ群209952809(需回答问题,答案为csdn);群聊更快解决问题,更happy。
如果本地已经提交过包含大文件的commit,如下图:
请使用 git reset --mixed 回退到未包含大文件的前一个commit点。示例中add txt这个commit包含了大文件,所以要回退到上一个commit。 (只提交了一个commit,可以直接git reset --mixed HEAD^;如果不清楚哪个commit包含大文件,可以git reset --mixed origin/master,示例中为master。)
注意:最多回退到origin/master,再往前,push就会引起冲突了。
如何确定需要跟踪的文件后缀?(windows环境请用git自带的Git Bash,示例是查找超过1M的文件)
进行LFS跟踪:如果查找的大文件后台是.jar,直接 git lfs track “.txt"。(跟踪多种后缀:git lfs track ".png” “*.jar”)
注意:一定要先track再add、commit,如果没安装过LFS,请查看安装指南。
再进行git add和git commit操作。使用 git lfs ls-files 确认一下,是否已经track LFS对象。(如果ls-files列表为空,说明没track上)
这个时候能正常push了,push时可以看到 Uploading LFS objects字样。(如果LFS对象没push上,可以尝试git lfs push)
如果项目是从外部导入或从SVN导入的,本地全部历史都需进行LFS转换,且需保留历史的,请使用以下方式:
如上图,有几个commit包含超过1M的pdf和jar文件,直接push工程会被拦截导致报错。
如何知道全部的commit历史中哪些文件过大?必须使用(git-lfs/2.7.1及以上版本) git lfs migrate info --above=“1 MB” --everything --top 10
对这个项目的全部分支的历史记录进行LFS对象转换,使用 git lfs migrate import --include=".jar,.pdf" --everything
确保lfs对象已跟踪后,推送到远端。(push全部可以 git push origin --all git push origin --tags,如果还不成功尝试git lfs push)
注意:LFS对象转换会改写历史记录(即commit sha1会发生变化),再更新原(github或svn)项目时会产生大量冲突。
只适用一次迁移的情形,不适用github或svn和工蜂并行使用。(以后还有更新github或svn,需要重新clone一份,再做一次git
lfs migrate)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。