当前位置: 首页 > news >正文

debian12部署Gitea服务之二——部署git-lfs

Debian安装gitlfs:
先更新下软件包版本
sudo apt update
安装
sudo apt install git-lfs
验证是否安装成功
git lfs version
cd到Gitea仓库目录下
cd /mnt/HuHDD/Git/Gitea/Repo/hu/testrepo.git
执行lfs的初始化命令
git lfs install客户机Windows端在官网下载并安装Git-Lfs
再本地Git仓库工作空间下打开Git bash
执行lfs初始化命令
git lfs install

初始化之后发现工作空间如下内容发生了变化:

config文件增加了如下内容:

[lfs]
    repositoryformatversion = 0

跟踪大文件:

现在,你可以选择需要用Git LFS跟踪大文件,并将它们加入到Git LFS管理中。例如,如果你要跟踪所有.mp4 文件,可以运行:

git lfs track "*.mp4"

执行了上述命令之后,仓库根目录下会出现这个文件:

打开这个文件,发现内容如下,实际就是配置了哪些文件被lfs追踪:

*.mp4 filter=lfs diff=lfs merge=lfs -text

它告诉 Git 如何处理 .mp4 文件。具体来说:

  • *.mp4:这表示这个规则适用于所有扩展名为 .mp4 的文件。
  • filter=lfs:这表示当 Git 检出和提交这些文件时,应该使用 Git LFS 过滤器。这意味着这些文件的内容将由 Git LFS 管理,而不是由 Git 本身管理。
  • diff=lfsmerge=lfs:这表示当 Git 对这些文件进行差异比较和合并时,应该使用 Git LFS 的差异比较和合并策略。这通常意味着 Git 将不会尝试对这些文件的内容进行差异比较和合并,因为这些文件通常是二进制文件,不能像文本文件那样进行差异比较和合并。
  • -text:这表示 Git 不应该尝试将这些文件的内容视为文本。这可以防止 Git 在检出文件时自动转换行结束符。

另外会发现hooks钩子目录下会部署以下文件,lfs的大文件管理就是基于这些钩子实现的,有兴趣的可以深入研究一下:

测试提交并推送更改:

git add .gitattributes
git add your_large_files.mp4
git commit -m "Add large files"
git push origin master
我这里上传了一个一百多M的mp4文件(手头没有mp4文件,就拿一个压缩包改了后缀名冒名顶替了一下,手动斜眼)。提交并推送之后,我们远程到Gitea服务器上去看一下,首先看下Gitea代码仓库的大小:

才272k,显然,咱们的大文件果然不会被传入到代码仓库中,代码仓库中只会存储对于大文件夹的指针的引用。

那么咱们就去看下之前部署Gitea时所指定的git-lfs的目录下去看看。

大小127M,果然是在这里,再看一下结构:

可以看出文件是按照上面这样一种结构来存储的,使用文件的哈希值作为路径名称,将代码仓库中的引用指向这里,从而实现了大文件与代码仓库中的小文件分开存储的需求。 

如果进一步验证的话,可以使用下面的命令:

使用仓库最后一次的commit对象,一直追溯到一个blob对象,指针开头为e53f,具体细节不再赘述,使用下面命令来查看该blob对象的内容:
git cat-file -p e53f
会看见这个blob的内容如下:
version https://git-lfs.github.com/spec/v1
oid sha256:74add27b1c9d3c39883fee6d130588a3f88959a578a7563b7a519c6e1a864a5d
size 132455501解读一下:
version https://git-lfs.github.com/spec/v1:这是Git LFS规范的版本信息。
oid sha256:74add27b1c9d3c39883fee6d130588a3f88959a578a7563b7a519c6e1a864a5d:这是文件的对象标识符(OID),它是文件内容的SHA-256哈希值。
size 132455501:这是文件的大小,单位是字节。
这个指针文件实际上是一个文本文件,它指向存储在服务器上的大文件。当您克隆或拉取仓库时,Git LFS会下载这些大文件,并用它们替换本地的指针文件。这样,大文件就不会存储在Git仓库中,从而保持了仓库的轻量。

注:如果不想每次进行git push时输入密钥的密码,可以git bash中执行以下命令:

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
  1. eval "$(ssh-agent -s)":这个命令会启动 SSH 代理。SSH 代理是一个在后台运行的程序,它可以保存你的 SSH 密钥,并在需要时自动提供密钥。eval 命令会执行 ssh-agent -s 命令的输出,这样就可以设置 SSH 代理的环境变量。

  2. ssh-add ~/.ssh/ssh.key:这个命令会将你的 SSH 密钥添加到 SSH 代理中。这样,当你需要使用 SSH 密钥时,SSH 代理可以自动提供密钥,你就不需要每次都手动输入密钥的密码。请注意,你需要将 ssh.key 替换为你的密钥的实际名称。当然,你也可以使用我上面的*号形式的模糊匹配。

下载大文件:

其他开发者在克隆仓库时,可以通过运行以下命令来下载大文件:

git lfs pull

注意事项:

  • 请确保所有参与的开发者都安装了Git LFS。
  • 在使用Git LFS时,确保不要将大文件直接添加到Git仓库,而是通过Git LFS进行跟踪和管理。
  • 如果你的Gitea服务器是通过HTTPS进行访问的,你可能需要在服务器上配置Git LFS的HTTPS认证。

相关文章:

  • 2024年软考考试时间确定了!请收好
  • 连接世界:2024 年 5G 及未来技术趋势
  • Vue3+ElementPlus实例_select选择器(不连续搜索)
  • MySQL、Oracle 常用SQL:建表、建视图、数据增删改查、常用condition
  • WPF Converter转换器
  • 如何将github copilot当gpt4用
  • 8. 《自动驾驶与机器人中的SLAM技术》基于保存的自定义NDT地图文件进行自动驾驶车辆的激光定位
  • 如何进行产品的人机交互设计?
  • 十、Qt 操作PDF文件
  • 文心一言 vs. ChatGPT:哪个更胜一筹?
  • 整合junit与热部署
  • C技能树-学习笔记(1-2)C语言概述和数据类型
  • 2024年第十届控制、自动化与机器人国际会议(ICCAR 2024)即将召开!
  • 三种引入CSS的方式
  • 1 python计算机基础
  • co模块的前端实现
  • create-react-app项目添加less配置
  • HashMap剖析之内部结构
  • java取消线程实例
  • magento2项目上线注意事项
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • Quartz初级教程
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 对JS继承的一点思考
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 前端技术周刊 2019-02-11 Serverless
  • 探索 JS 中的模块化
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 怎样选择前端框架
  • 1.Ext JS 建立web开发工程
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #NOIP 2014#Day.2 T3 解方程
  • (2)MFC+openGL单文档框架glFrame
  • (5)STL算法之复制
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (安卓)跳转应用市场APP详情页的方式
  • (笔试题)分解质因式
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • (转)ORM
  • (转)程序员疫苗:代码注入
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .NET 4.0中的泛型协变和反变
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET 将混合了多个不同平台(Windows Mac Linux)的文件 目录的路径格式化成同一个平台下的路径
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore部署微服务(二)
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • /etc/motd and /etc/issue