git blob

读:

  • 第1部分:什么是Git?
  • 第2部分:Git入门
  • 第3部分:创建第一个Git存储库
  • 第4部分:如何在Git中还原旧文件版本
  • 第5部分:3个用于Git的图形工具
  • 第6部分:如何构建自己的Git服务器
  • 第7部分:如何使用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

git blob_如何使用Git管理二进制Blob相关推荐

  1. 【Java从0到架构师】git 核心原理和分支管理

    git 核心原理和分支管理 核心原理 Git 数据存储结构 git add 流程 - 把数据添加到暂存区 git commit 流程 - 把数据提交到版本库 HEAD 关联关系处理 分支管理 常用命令 ...

  2. Git之深入解析Git的杀手级特性·分支管理与分支变基的开发工作流以及远程分支的跟踪

    一.Git 分支简介 几乎所有的版本控制系统都以某种形式支持分支,使用分支意味着可以把工作从开发主线上分离开来,以免影响开发主线.在很多版本控制系统中,这是一个略微低效的过程,常常需要完全创建一个源代 ...

  3. git使用指南及分支管理策略

    Git是什么? Git是一个开源的分布式的版本管理工具. 为什么要使用GIt? Git是目前世界上最先进的版本管理工具,尤其在分支管理上表现突出,能够极为方便地解决开发中的版本问题. Git如何使用? ...

  4. idea从git上拉取并管理项目

    idea从git上拉取并管理项目 1:idea从git上拉取项目 (1)FILE --> New --> Project from Version Control --> Git ( ...

  5. 【代码管理】GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流

    GitHub操作总结 : 总结看不明白就看下面的详细讲解. . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/details ...

  6. 【git学习三】git基础之git管理远程仓库

    1.背景 git管理远程仓库,本文以github为例. 2.管理远程仓库 1.本地ssh认证,在github建立一个repo叫做ospaf-GetWordFre            2.添加远程仓库 ...

  7. 【git学习二】git基础之git管理本地项目

    1.背景 git基础打算分两部分来说,一部分是对于本地项目的管理,第二部分是对于远程代码仓库的操作.git执行本地项目管理包括对于相关文件的追踪,暂存区的比较分析,提交,撤销等功能. 2.本地项目管理 ...

  8. Git学习笔记:标签管理以及GItHub

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

  9. Git学习笔记:分支管理3

    前言 在补习python的时候主要参考的是廖雪峰的教程Python教程,在学习完后准备完成期末作业时,遇到了一个技术难题,需要初步掌握git,因此开始了git的学习. 本教程参考廖雪峰的Git教程 G ...

最新文章

  1. unique函数_Office 365函数新世界:动态数组
  2. shell输出没有换行符
  3. 人类史上20个“最强大脑”
  4. html5与课程思政,“课程思政”怎样做
  5. 服务器硬件和算力,硬件科普Filecoin运维交付之业务部署
  6. github page hexo博客gitee_利用Github和hexo搭建个人免费博客
  7. python学生名片系统_python学生管理名片
  8. Bootstrap按钮下拉菜单的尺寸
  9. CenOs6.3下博通BCM4313无线网卡驱动
  10. ubuntu18.04搭建nfs
  11. java使用DES加密方式,实现对数据的加密解密
  12. php的public、protected、private三种访问控制模式的区别
  13. 一定能成功的Android NDK环境配置教程
  14. 获取各城市poi数据
  15. c语言入门篇:程序调试方法
  16. linux安装7z命令,Linux 下安装 7zip 及使用
  17. 面试:后端程序员面试题
  18. 码农的自我修养 - 流程图 Flowchart
  19. GitHub 预览 Copilot,一个 OpenAI 驱动的编码助手
  20. 国画家刘艺青个人介绍

热门文章

  1. vue中$router以及$route的使用
  2. 《C++之那些年踩过的坑(附录一)》
  3. Ubuntu14.04部署CEPH
  4. Windows下安装Scala
  5. LaTeX之参考文献的写法
  6. kindeditor编辑器 编辑器textarea不能获取到内容的解决办法
  7. (转)Android IPC机制详解
  8. 对工作生活的一点感悟
  9. aspectj 注解
  10. 很喜欢VS.NET 2003对条件编译的代码提示