使用git-lfs管理大文件

当我们使用git管理文件版本的时候,经常会有一些比较大的文件,比如一些模型文件,或者备份的文档资料等,这些文件属于如果太大,就会给git的管理带来困难。

所以,对于这种大文件,一般我们就会采用lfs工具,来单独管理这种文件。

使用lfs管理文件之后,进行推送的时候,大文件会被替换成一个引用地址,拉取的时候,又会自动地替换回来。

安装lfs

lfs没有跟git一起,需要单独安装。

在Fedora等系统里,可以直接通过

dnf install git-lfs

安装。

安装的最后,会看到输出:

>>> Scriptlet 输出: 
>>> Git LFS initialized.                  
>>>                                         
完成!

表示初始化成功。之后就可以使用git lfs命令了。

如果是Ubuntu等系统,则是

apt install git-lfs

跟踪大文件

在项目源代码里,需要先建立对大文件的跟踪,之后才能加入大文件,进行管理。

建立对大文件的跟踪的命令是track。

如:

git lfs track *.mp4

执行之后,我们会看到项目根目录下面,多了一个.gitattributes文件,这就是管理大文件的配置文件。

之后再加入的.mp4结尾的文件,将自动进入lfs的管理。

如:

git add a.mp4

提交历史中的大文件

有的时候,当我们想使用lfs的时候,大文件已经在git里提交过了。

这时候就需要使用lfs的migrate命令来进行迁移,之后再强行推送到远端仓库。

如:

# 迁移所有历史中的指定文件(例如*.mp4和*.zip)
git lfs migrate import --include="*.mp4,*.zip" --everything

# 检查迁移后的历史是否正确
git log --stat

# 强制推送所有分支到远程仓库
git push origin --force --all
# 强制推送所有标签到远程仓库
git push origin --force --tags

其中,

  • --include 参数指定要迁移的文件模式,支持通配符。
  • --everything 表示处理所有分支和标签的历史。

通过以上步骤,历史提交中的大文件将被替换为LFS指针,并纳入LFS管理。

.gitattributes文件的-text

在 .gitattributes 文件中,-text 是一个 Git 属性设置,用于明确禁止 Git 对特定文件进行换行符(line endings)的自动转换。

如:

*.png -text
*.zip -text
*.exe -text

注:这里的语法有点儿令人费解。text明明表示文本,为什么使用-text却是让lfs按照二进制的方法管理文件呢?其实,这里的语法是一个-,再加上text,即减去text属性的意思。

所以,实际上这个text有三种使用方式:

  • text:允许 Git 自动转换换行符(例如 *.sh text)。
  • text=auto:让 Git 自动判断是否为文本文件(默认行为)。
  • -text:强制禁用换行符转换,即使文件看起来像文本。

强制拉取与推送

当推送或拉取仓库时,Git LFS 会自动下载真实文件,无需手动操作。

但是,也有偶尔出错的情况,比如网络问题,或者其它错误使用,导致了拉取之后,本地的大文件仅仅是一个文件指针(文件很小,里面只是一个路径)。

这时候,就需要手动执行lfs pull命令:

git lfs pull

再比如出现大文件推送失败的时候,也可以使用lfs push命令:

git lfs push
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值