git blob_如何使用Git管理二进制Blob

git blob

读:

在本系列的前六篇文章中,我们学习了如何使用Git管理文本文件的版本控制。 但是二进制文件呢? Git具有用于处理二进制斑点(例如多媒体文件)的扩展,因此今天我们将学习如何使用Git管理二进制资产。

每个人似乎都同意的一件事是,Git对于大型二进制blob并不是很好。 请记住,二进制blob与大型文本文件不同; 您可以毫无问题地在大型文本文件上使用Git,但是Git对于不可渗透的二进制文件不能做很多事情,只能将它当作一个大的黑盒子并按原样提交。

假设您有一个复杂的3D模型用于制作令人兴奋的新型第一人称益智游戏,然后将其保存为二进制格式,从而得到1 GB的文件。 您只需git commit一次,即可在存储库的历史记录中添加1 GB的数据。 稍后,您给模型一个不同的发型并提交更新。 Git无法分辨头发的头部或模型其余部分,因此您刚刚提交了另一GB数据。 然后,您更改模型的眼睛颜色,并进行较小的更改:另一个千兆字节。 对于一个模型来说,这是3 GB,在瞬间进行了一些小的更改。 将其扩展到游戏中的所有资产上,就会遇到严重的问题。

将其与文本文件(如.obj格式)进行对比。 一次提交将存储所有内容,就像其他模型一样,但是.obj文件是一系列纯文本行,描述了模型的顶点。 如果修改模型并将其保存回.obj ,Git可以逐行读取两个文件,创建更改的差异,并处理相当小的提交。 模型变得越精细,提交的内容就越少,这是标准的Git用例。 它是一个大文件,但是它使用一种覆盖或稀疏存储方法来构建数据当前状态的完整图片。

但是,并非所有内容都以纯文本格式工作,如今,每个人都希望与Git合作。 需要一种解决方案,其中一些已经浮出水面。

Git大文件存储 (LFS)是GitHub的一个开源项目,最初是git-media的分支。 Git-media和git-annex是对Git的扩展,旨在管理大型文件。 它们是解决同一问题的两种不同方法,每种方法都有其优势。 这些不是项目本身的官方声明,但是根据我的经验,每个项目的独特之处在于:

  • Git-annex支持分布式模型。 您和您的用户创建了存储库,每个存储库都有一个本地.git/annex目录,该目录用于存储大文件。 附件会定期同步,以便所有资产在需要时可供所有用户使用。 除非另行配置annex-cost ,否则git-annex优先于本地存储,而不是异地存储。

  • Git-portal也是分布式的,并且像Git-annex一样可以选择同步到中心位置。 它使用您可能已经安装的通用实用程序(特别是Bash,Git,rsync)。

  • Git-LFS是集中式模型,是常见资产的存储库。 您告诉Git-LFS大文件的存储位置,无论是硬盘驱动器,服务器还是云存储服务,项目中的每个用户都将该位置视为大型资产的中央主位置。

git门户

Git-portal使用标准的UNIX工具(如Bash,Git本身以及可选的rsync)为Git提供简化的Blob管理。 它将大的二进制文件复制到本地或远程存储中,并替换为符号链接,您可以将其与其他项目文件一起提交。

Git-portal很简单,但有时要花一些手动(例如,它没有自动垃圾收集功能)。 对于需要管理通常不适合Git管理但又不想学习全新系统的大文件的用户而言,它是理想的选择。 Git-portal模仿Git本身,因此学习曲线很少。

您可以从Gitlab上的项目页面安装Git-portal。

所有的Git-portal命令都反映了Git本身。 要在项目中使用Git-portal:

 $  git-portal init 

要添加文件:

 $  git-portal add bigfile.png 

一旦文件“通过门户发送”(使用项目的术语),您与Git的交互就和通常一样。 您可以像往常一样添加文件,而相对地忽略了其中一些文件是_portal目录的秘密符号链接这一事实

可以将_portal目录中的所有内容(分别被USB驱动器或远程服务器)分别备份到Git完全忽略的所有存储中。 因为Git-portal提供了一些Git钩子(由特定的Git动作触发的自动脚本,例如推或拉),所以您甚至可以设置特殊的Git远程条目,以便_portal目录自动与远程位置同步:

 $  git remote add _portal alice @ myserver.com: / home / alice / umbrella.git / _portal 

Git-portal的优点是它是一个简单的Linux原生系统。 使用相当少的通用实用程序堆栈,并且只需记住一些额外的命令,您就可以管理大型项目依赖项,甚至可以在协作者之间共享它们。 Git-portal已用于媒体项目,独立视频游戏和游戏博客,以管理从小幅初始图像到大PDF甚至更大的3d模型的所有内容。

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.clone
Cloning into 'jupiter.clone' ... warning: You appear to have cloned
an empty repository. Checking connectivity... done.
$ git annex init "seth workstation" init seth workstation ok

您无需使用过滤器来标识媒体资产或大文件,而是使用git annex命令配置将哪些内容分类为大文件:


   
   
$ git annex add bigblobfile.flac
add 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-annex
To seth @ example.com: / opt / jupiter.git
* [ new branch ] master - > master
* [ new branch ] git-annex - > git-annex

git-media ,一个正常的git push 你的资产复制到服务器,它只发送有关媒体的信息。 当您准备与团队的其他成员共享资产时,请运行sync命令:

 $  git annex sync --content 

如果其他人将共享资产共享到服务器,而您需要将其提取,则git annex sync将提示您本地结帐以提取计算机上不存在但服务器上存在的资产。

Git annex是一个经过微调的解决方案,灵活且用户友好。 它功能强大且经过了严格的测试。

git-lfs

git-lfs是用Go编写的,您可以从源代码或作为可下载的二进制文件进行安装。 说明在网站上 。 每个想要使用git-lfs用户都需要安装它,但是它是跨平台的,因此通常不会造成问题。

安装git-lfs ,您可以设置要让Git忽略的文件类型以及要管理的Git-LFS。 例如,对于Git-LFS跟踪所有.png文件:

 $  git lfs track "*.png" 

每当您添加用于Git-LFS跟踪的文件类型时,都必须添加然后提交文件.gitattributes


   
   
$ git add .gitattributes
$ git commit -m "LFS track *.png"

.git/lfs这些类型的文件时,该文件将复制到.git/lfs

Git-LFS是Github的一个项目,与Github的基础架构紧密相关。 如果要运行允许Git-LFS集成的Git服务器,则可以研究Git-LFS服务器规范 (也用Go编写)并实现API。

git-portalgit-annex都很灵活,可以使用本地存储库而不是服务器,因此它们对于管理私有本地项目也同样有用。

大文件和Git

虽然Git是用于文本文件的,但这并不意味着您不能仅仅因为拥有二进制资产而使用它。 有很好的解决方案可以帮助您管理大型文件。 如果您愿意的话,不使用Git的确没有很多借口,所以今天就尝试吧!

翻译自: https://opensource.com/life/16/8/how-manage-binary-blobs-git-part-7

git blob

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值