位置: IT常识 - 正文

使用Git管理二进制大对象的方法(git可以管理二进制文件吗)

编辑:rootadmin
Git 是一个非常强大和扩展性非常强的系统应用软件,如何使用 Git 管理二进制大对象?下面小编将为大家详细的讲述使用Git管理二进制大对象的方法;希望对大家会有帮助,有需要的朋友一... 17-02-15

推荐整理分享使用Git管理二进制大对象的方法(git可以管理二进制文件吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:git管理二进制文件,git进入仓库,git二次开发管理,git2go,git2go,git2go,git进程,git二次开发管理,内容如对您有帮助,希望把文章链接给更多的朋友!

通过这系列的前六篇文章,我们已经学会使用 Git 来对文本文件进行版本控制的管理。我们不禁要问,还有二进制文件呢,也可进行进行版本控制吗?答案是肯定的,Git 已经有了可以处理像多媒体文件这样的二进制大对象块(blob)的扩展。因此,今天我们会学习使用 Git 来管理所谓的二进制资产。

似乎大家都认可的事就是 Git 对于大的二进制对象文件支持得不好。要记住,二进制大对象与大文本文件是不同的。虽然 Git 对大型的文本文件版本控制毫无问题,但是对于不透明的二进制文件起不了多大作用,只能把它当作一个大的实体黑盒来提交。

设想这样的场景,有一个另人兴奋的第一人称解密游戏,您正在为它制作复杂的 3D 建模,源文件是以二进制格式保存的,最后生成一个 1GB 大小的的文件。您提交过一次,在 Git 源仓库历史中有一个 1GB 大小的新增提交。随后,您修改了下模型人物的头发造型,然后提交更新,因为 Git 并不能把头发从头部及模型中其余的部分离开来,所以您只能又提交 1GB 的量。接着,您改变了模型的眼睛颜色,提交这部分更新:又是 GB 级的提交量。对一个模型的一些微小修改,就会导致三个 GB 级的提交量。对于想对一个游戏所有资源进行版本控制这样的规模,这是个严重的问题。

不同的是如obj这种格式的文本文件,和其它类型文件一样,都是一个提交就存储所有更新修改状态,不同的是obj 文件是一系列描述模型的纯文本行。如果您修改了该模型并保存回obj 文件,Git 可以逐行读取这两个文件,然后创建一个差异版本,得到一个相当小的提交。模型越精细,提交就越小,这就是标准的 Git 用例。虽然文件本身很大,但 Git 使用覆盖或稀疏存储的方法来构建当前数据使用状态的完整描述。

然而,不是所有的都是纯文本的,但都要使用 Git,所以需要解决方案,并且已经出现几个了。

OSTree 开始是作为 GNOME 项目出现的,旨在管理操作系统的二进制文件。它不适用于这里,所以我直接跳过。

Git 大文件存储(LFS) 是放在 GitHub 上的一个开源项目,是从 git-media 项目中分支出来的。git-media 和 git-annex 是 Git 用于管理大文件的扩展。它们是对同一问题的两种不同的解决方案,各有优点。虽然它们都不是官方的项目,但在我看来,每个都有独到之处:

git-media 是集中模式,有一个公共资产的存储库。你可以告诉 git-media 大文件需要存储的位置,是在硬盘、服务器还是在云存储服务器,项目中的每个用户都将该位置视为大型文件的中心主存储位置。 git-annex 侧重于分布模式。用户各自创建存储库,每个存储库都有一个存储大文件的本地目录git/annex。这些 annex 会定期同步,只要有需要,每个用户都可以访问到所有的资源。除非通过 annex-cost 特别配置,否则 git-annex 优先使用本地存储,再使用外部存储。

对于这些,我已经在生产中使用了 git-media 和 git-annex,那么下面会向你们概述其工作原理。

git-media

git-media 是使用 Ruby 语言开发的,所以首先要安装 gem(LCTT 译注:Gem 是基于 Ruby 的一些开发工具包)。安装说明在其网站上。想使用 git-meida 的用户都需要安装它,因为 gem 是跨平台的工具,所以在各平台都适用。

安装完 git-media 后,你需要设置一些 Git 的配置选项。在每台机器上只需要配置一次。

$git config filter.media.clean "git-media filter-clean"$ git config filter.media.smudge "git-media filter-smudge"

在要使用 git-media 的每个存储库中,设置一个属性以将刚刚创建的过滤器结合到要您分类为“媒体”的文件类型里。别被这种术语混淆。一个更好的术语是“资产”,因为“媒体”通常的意思是音频、视频和照片,但您也可以很容易地将 3D 模型,烘焙和纹理等归类为媒体。

例如:

$ echo "*.mp4 filter=media -crlf" >> .gitattributes$ echo "*.mkv filter=media -crlf" >> .gitattributes$ echo "*.wav filter=media -crlf" >> .gitattributes$ echo "*.flac filter=media -crlf" >> .gitattributes$ echo "*.kra filter=media -crlf" >> .gitattributes使用Git管理二进制大对象的方法(git可以管理二进制文件吗)

当您要暂存stage这些类型的文件时,文件会被复制到git/media目录。

假设在服务器已经有了一个 Git 源仓库,最后一步就告诉源仓库“母舰”所在的位置,也就是,当媒体文件被推送给所有用户共享时,媒体文件将会存储的位置。这在仓库的 git/config 文件中设置,请替换成您的用户名、主机和路径:

[git-media]transport = scpautodownload = false #默认为 true,拉取资源scpuser = sethscphost = example.comscppath = /opt/jupiter.git

如果您的服务器上 SSH 设置比较复杂,例如使用了非标准端口或非默认 SSH 密钥文件的路径,请使用ssh/config为主机设置默认配置。

git-media 的使用和普通文件一样,可以把普通文件和 blob 文件一样对待,一样进行 commit 操作。操作流程中唯一的不同就是,在某些时候,您应该将您的资产(或称媒体)同步到共享存储库中。

当要为团队发布资产或自己备份资料时,请使用如下命令:

$ git media sync

要用一个变更后的版本替换 git-media 中的文件时(例如,一个已经美声过的音频文件,或者一个已经完成的遮罩绘画,或者一个已经被颜色分级的视频文件),您必须明确的告诉 Git 更新该媒体。这将覆盖 git-media 不会复制远程已经存在的文件的默认设置:

$ git update-index --really-refresh

当您团队的其他成员(或是您本人,在其它机器上)克隆本仓库时,如果没有在git/config中把autodownload选项设置为true的话,默认是不会下载资源的。但 git-media 的一个同步命令git media sync可解决所有问题。

git-annex

git-annex 的处理流程略微的有些不同,默认是使用本地仓库的,但基本的思想都一样。您可以从你的发行版的软件仓库中安装 git-annex,或者根据需要从该网站上下载安装。与 git-media 一样,任何使用 git-annex 的用户都必须在其机器上安装它。

其初始化设置比 git-media 都简单。运行如下命令,其中替换成您的路径,就可以在您的服务器上创建好裸存储库:

$ git init --bare --shared /opt/jupiter.git

然后克隆到本地计算机,把它标记为 git-annex 的初始路径:

$ git clone seth@example.com:/opt/jupiter.cloneCloning into 'jupiter.clone'... warning: You appear to have clonedan empty repository. Checking connectivity... done.$ git annex init "seth workstation" init seth workstation ok

不要使用过滤器来区分媒体资源或大文件,您可以使用git annex 命令来配置归类大文件:

$ git annex add bigblobfile.flacadd bigblobfile.flac(checksum) ok(Recording state in Git...)

跟普通文件一样进行提交操作:

$ git commit -m 'added flac source for sound fx'

但是推送操作是不同的,因为git annex使用自己的分支来跟踪资产。您首次推送可能需要-u 选项,具体取决于您如何管理您的存储库:

$ git push -u origin master git-annexTo seth@example.com:/opt/jupiter.git* [new branch] master -> master* [new branch] git-annex -> git-annex

和 git-media 一样,普通的git push 命令是不会拷贝资料到服务器的,仅仅只是发送了相关的消息,要真正共享文件,需要运行同步命令:

$ git annex sync --content

人已经提交了共享资源,您需要拉取它们,git annex sync 命令将提示您要在本地检出你本机没有,但在服务器上存在的资源。

git-media 和 git-annex 都非常灵活,都可以使用本地存储库来代替服务器,所以它们也常用于管理私有的本地项目。

Git 是一个非常强大和扩展性非常强的系统应用软件,我们应该毫不犹豫的使用它。现在就开始试试吧!

本文链接地址:https://www.jiuchutong.com/zhishi/281404.html 转载请保留说明!

上一篇:家用电脑的基本维护常识(家用电脑分为哪几类)

下一篇:ibguard.exe进程文件诊断 是什么进程 ibguard进程查询(application guard)

  • 抖音怎么可以查看通讯录好友(抖音怎么可以查看谁收藏了自己的作品)

    抖音怎么可以查看通讯录好友(抖音怎么可以查看谁收藏了自己的作品)

  • qq评论气泡在哪里设置(qq评论气泡在哪里关闭)

    qq评论气泡在哪里设置(qq评论气泡在哪里关闭)

  • 苹果11可以单独换外屏吗(苹果11可以单独设置闹钟音量吗)

    苹果11可以单独换外屏吗(苹果11可以单独设置闹钟音量吗)

  • 输出设备是指什么(输出设备是?)

    输出设备是指什么(输出设备是?)

  • iphonex长度(苹果 iphone x长度)

    iphonex长度(苹果 iphone x长度)

  • 抖音怎么关掉美颜和滤镜(抖音怎么关掉美颜滤镜瘦脸)

    抖音怎么关掉美颜和滤镜(抖音怎么关掉美颜滤镜瘦脸)

  • 如何关闭手机键盘输入声音(如何关闭手机键盘)

    如何关闭手机键盘输入声音(如何关闭手机键盘)

  • 号码加入黑名单对方听到的是什么(号码加入黑名单为什么还能打进来)

    号码加入黑名单对方听到的是什么(号码加入黑名单为什么还能打进来)

  • 6s原装电池多少毫安(苹果6s的原装电池多少钱)

    6s原装电池多少毫安(苹果6s的原装电池多少钱)

  • 全名k歌扫一扫在哪里(全名k歌怎么扫二维码)

    全名k歌扫一扫在哪里(全名k歌怎么扫二维码)

  • 海外版显卡是什么意思(海外版显卡是什么)

    海外版显卡是什么意思(海外版显卡是什么)

  • 右下标数字怎么打(右下角的数字怎么弄)

    右下标数字怎么打(右下角的数字怎么弄)

  • 移动4g 全网通什么意思

    移动4g 全网通什么意思

  • 12306改签退的钱什么时候到账(12306改签退的钱不一样)

    12306改签退的钱什么时候到账(12306改签退的钱不一样)

  • 微信登录如何解除情侣空间(微信登录如何解除安全验证)

    微信登录如何解除情侣空间(微信登录如何解除安全验证)

  • 小米9pro怎么设置手电筒快捷键(小米9pro5g怎么设置)

    小米9pro怎么设置手电筒快捷键(小米9pro5g怎么设置)

  • 多媒体是以什么形式存在(多媒体是以什么形式存储的)

    多媒体是以什么形式存在(多媒体是以什么形式存储的)

  • 咪咕盒子怎么连接手机(咪咕盒子怎么连接电视和路由器)

    咪咕盒子怎么连接手机(咪咕盒子怎么连接电视和路由器)

  • 手机黑屏是怎么回事(手机黑屏是怎么回事,教您如何恢复手机使用华为)

    手机黑屏是怎么回事(手机黑屏是怎么回事,教您如何恢复手机使用华为)

  • 抖音怎么复制别人的评论(抖音怎么复制别人的文案)

    抖音怎么复制别人的评论(抖音怎么复制别人的文案)

  • iphone11什么时候可以激活(iphone11什么时候下架的)

    iphone11什么时候可以激活(iphone11什么时候下架的)

  • OPPO手机如何关闭位置信息(oppo手机如何关闭安全守护)

    OPPO手机如何关闭位置信息(oppo手机如何关闭安全守护)

  • pr怎样添加背景音乐(pr如何加背景)

    pr怎样添加背景音乐(pr如何加背景)

  • b站怎么加好友(b站怎样通过手机号找人)

    b站怎么加好友(b站怎样通过手机号找人)

  • bios密码忘记了怎么办?BIOS密码破解清除方法详解(bios密码忘记了怎么清除,放电不行)

    bios密码忘记了怎么办?BIOS密码破解清除方法详解(bios密码忘记了怎么清除,放电不行)

  • 格里姆瑟尔山口Totesee山地湖中倒映出的星星,瑞士伯尔尼 (© magodevita/Getty Images)(格里姆火山)

    格里姆瑟尔山口Totesee山地湖中倒映出的星星,瑞士伯尔尼 (© magodevita/Getty Images)(格里姆火山)

  • 企业所得税是什么意思
  • 应交税费会计分录怎么做明细科目
  • 公司购买股票如何做账
  • 专项扣除三险一金为0
  • 利息费用如何在记账软件输入
  • 电子发票可以更改备注吗
  • 如何查看增值税申报表
  • 农民合作社交哪些税
  • 加油电子普通发票可以抵扣增值税吗
  • 收到电子退库的摘要怎么写
  • 发票没用完可以申请超限量吗
  • 2019小规模纳税人免征增值税政策
  • 应交税费减免税额结转
  • 事业单位过节发东西
  • 零退税率可以做免税吗
  • 小规模纳税人可以开3%的专票吗
  • 服务行业有哪些工作
  • 宽带合同属于什么合同
  • 到底如何理解参数方程
  • 个人缴纳的公积金可以贷款吗
  • 企业怎么才能开100万发票
  • 超市预付卡过了还能退吗
  • 注册资本与利息的税前扣除
  • 以前年度损益调整借贷方向
  • 购进商品是什么会计科目
  • mac怎么连接蓝牙鼠标
  • 鸿蒙系统怎么看运行程序
  • 承兑兑现违法吗
  • 营业外收入怎么申报增值税
  • 浅谈php技术
  • 会计月末做账
  • 第4章 数据处理思维导图
  • php.ini详解
  • 踩雷日记:Pytorch mmcv-full简易安装
  • 自愿放弃增值税优惠怎么写
  • 采用定额法计算产品成本,其程序如何?
  • vue的路由守卫有哪些钩子函数
  • php图片库
  • 应收账款等于什么加什么
  • java枚举写法
  • python中的count函数
  • 实收资本大于注册资本是什么意思
  • 什么是技术服务工程师
  • 工会经费计提的会计分录
  • 分公司利润怎么结转给总公司需要交税
  • 视同销售是填在申报表的哪一栏?
  • 付了工资的资产负债表怎么填
  • 租办公室自己装修可以拆走吗
  • 农产品收购发票可以不抵扣吗
  • 来料加工的账务处理新收入准则
  • 企业注销后账务保留多久
  • 新厂配电工程建设流程
  • 开建筑工程公司赚钱吗
  • 收到赞助费如何开发票
  • 坏账准备的余额百分比法
  • 专项应付款的账务处理营业外收入
  • 酒店购买的餐具可以退吗
  • 企业成立前期的重点工作
  • sqlserver存储过程声明变量
  • mysql 5.6 5.7
  • win9怎么升级win10
  • Windows任务计划高级应用
  • 日历功能在哪里设置
  • 如何汉化一个软件
  • Node.js中的事件循环是什么意思
  • nodejs调用c++函数
  • jquery 表格 排序
  • js文件设置编码
  • JavaScript中的方法名不区分大小写
  • unity打包安卓apk
  • jquery.flot
  • 基于javascript的毕业设计选题
  • 美国进口税起征点
  • 税务备案超过15天
  • 无偿划转暂行规定
  • 财税库银是什么税
  • 房屋契税和维修基金是开发商交还是业主交
  • 纳税人识别号和公司税号一样吗
  • 云开票怎么报税
  • 劳务报酬预缴税率表
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设