请选择 进入手机版 | 继续访问电脑版

[LINUX] 使用 Git管理二进制大对象的方法

[复制链接]
查看70 | 回复9 | 2021-9-5 03:21:25 | 显示全部楼层 |阅读模式

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

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

利用
Git管理二进制大对象的方法

假想 如许 的场景,有一个另人高兴 的第一人称解密游戏,您正在为它制作复杂的 3D 建模,源文件是以二进制格式保存的,末了 天生 一个 1GB 大小的的文件。您提交过一次,在 Git 源仓库汗青 中有一个 1GB 大小的新增提交。随后,您修改了下模子 人物的头发造型,然后提交更新,由于 Git 并不能把头发从头部及模子 中别的 的部分离开 来,以是 您只能又提交 1GB 的量。接着,您改变了模子 的眼睛颜色,提交这部分更新:又是 GB 级的提交量。对一个模子 的一些微小修改,就会导致三个 GB 级的提交量。对于想对一个游戏全部 资源举行 版本控制如许 的规模,这是个严峻 的标题 。

不同的是如obj这种格式的文本文件,和别的 范例 文件一样,都是一个提交就存储全部 更新修改状态,不同的是obj 文件是一系列形貌 模子 的纯文本行。假如 您修改了该模子 并保存回obj 文件,Git 可以逐行读取这两个文件,然后创建一个差异版本,得到一个相当 小的提交。模子 越风雅 ,提交就越小,这就是标准的 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管理二进制大对象的方法

git-media

git-media 是利用 Ruby 语言开发 的,以是 起首 要安装 gem(LCTT 译注:Gem 是基于 Ruby 的一些开发 工具包)。安装阐明 在其网站上。想利用 git-meida 的用户都必要 安装它,由于 gem 是跨平台的工具,以是 在各平台都实用 。

利用
Git管理二进制大对象的方法

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

  1. $git config filter.media.clean "git-media filter-clean"
  2. $ git config filter.media.smudge "git-media filter-smudge"
复制代码

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

比方 :

  1. $ echo "*.mp4 filter=media -crlf" >> .gitattributes
  2. $ echo "*.mkv filter=media -crlf" >> .gitattributes
  3. $ echo "*.wav filter=media -crlf" >> .gitattributes
  4. $ echo "*.flac filter=media -crlf" >> .gitattributes
  5. $ echo "*.kra filter=media -crlf" >> .gitattributes
复制代码

当您要暂存stage这些范例 的文件时,文件会被复制到git/media目次 。

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

  1. [git-media]
  2. transport = scp
  3. autodownload = false #默认为 true,拉取资源
  4. scpuser = seth
  5. scphost = example.com
  6. scppath = /opt/jupiter.git
复制代码

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

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

当要为团队发布资产或本身 备份资料时,请利用 如下下令 :

  1. $ git media sync
复制代码

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

  1. $ 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管理二进制大对象的方法

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

  1. $ git init --bare --shared /opt/jupiter.git
复制代码

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

  1. $ git clone seth@example.com:/opt/jupiter.clone
  2. Cloning into 'jupiter.clone'...
  3. warning: You appear to have clonedan empty repository.
  4. Checking connectivity... done.
  5. $ git annex init "seth workstation"
  6. init seth workstation ok
复制代码

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

  1. $ git annex add bigblobfile.flac
  2. add bigblobfile.flac
  3. (checksum) ok
  4. (Recording state in Git...)
复制代码

跟平常 文件一样举行 提交操作:

  1. $ git commit -m 'added flac source for sound fx'
复制代码

但是推送操作是不同的,由于 git annex利用 本身 的分支来跟踪资产。您初次 推送大概 必要 -u 选项,具体 取决于您怎样 管理您的存储库:

  1. $ git push -u origin master git-annex
  2. To seth@example.com:/opt/jupiter.git
  3. * [new branch] master -> master
  4. * [new branch] git-annex -> git-annex
复制代码

和 git-media 一样,平常 的git push 下令 是不会拷贝资推测 服务器的,仅仅只是发送了相干 的消息,要真正共享文件,必要 运行同步下令 :

  1. $ git annex sync --content
复制代码

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

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

Git 是一个非常强大 和扩展性非常强的体系 应用软件,我们应该毫不夷由 的利用 它。如今 就开始试试吧!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 蓝色的天空888 | 2021-9-10 06:02:35 | 显示全部楼层
不灌水就活不下去了啊!
回复

使用道具 举报

avatar 123456914 | 2021-9-12 23:21:13 | 显示全部楼层
帖子很有深度!
回复

使用道具 举报

avatar 晚景入寒窗 | 2021-9-15 18:08:47 | 显示全部楼层
被admin楼主的逻辑打败了!
回复

使用道具 举报

avatar 福安到安顺屏 | 2021-9-20 06:07:57 | 显示全部楼层
今天的心情很不错啊
回复

使用道具 举报

avatar luly靓 | 2021-9-23 08:15:09 | 显示全部楼层
怎么我回帖都没人理我呢?
回复

使用道具 举报

avatar 掘金入眠刈 | 2021-10-1 15:33:20 | 显示全部楼层
论坛人气好旺!
回复

使用道具 举报

avatar 工兵班长纬 | 2021-10-3 04:30:28 | 显示全部楼层
脑残片admin楼主今天吃了么?
回复

使用道具 举报

avatar 尘埃384 | 2021-10-9 07:53:49 | 显示全部楼层
admin楼主,我告诉你一个你不知道的的秘密,有一个牛逼的网站,他卖的服务器是永久的,我们的网站用 服务器都是在这家买的,你可以去试试。访问地址:http://fwq.mxswl.com
回复

使用道具 举报

avatar 素色流年783 | 2021-10-15 03:38:59 | 显示全部楼层
楼上的真不讲道理!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则