git 删除git管理

Git是专门为源代码版本控制而设计的,因此,主要用于纯文本格式的项目和行业很少使用它。 但是,异步工作流的优点很有吸引力,尤其是在越来越多的行业中,将严肃的计算与认真的艺术创作相结合,包括网页设计,视觉效果,视频游戏,出版,货币设计(是的,这是一个真实的行业)。 ),教育……这个清单还在继续。

在Git成立14周年之前的系列文章中,我们分享了六种鲜为人知的Git使用方法。 在最后一篇文章中,我们将介绍将Git的优点带到管理多媒体文件的软件。

用Git管理多媒体文件的问题

众所周知,Git在非文本文件中不能很好地工作,但是挑战假设永远不会受到伤害。 这是使用Git复制照片文件的示例:

$ du -hs
108K .
$ cp ~/photos/dandelion.tif .
$ git add dandelion.tif
$ git commit -m 'added a photo'
[master (root-commit) fa6caa7] two photos
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 dandelion.tif
$ du -hs
1.8M .

到目前为止没有什么异常。 将1.8MB的照片添加到目录将导致目录大小为1.8MB。 因此,让我们尝试删除该文件:

$ git rm dandelion.tif
$ git commit -m 'deleted a photo'
$ du -hs
828K .

您可以在这里看到问题:提交大型文件后,将其删除会导致存储库的大小增加大约八倍于原始的原始状态(从108K到828K)。 您可以执行测试以获得更好的平均值,但是这个简单的演示与我的经验一致。 首先,提交不是基于文本的文件的成本是最小的,但是项目保持活动状态的时间越长,人们对静态内容所做的更改就越多,这些部分的累加也就越多。 当Git存储库变得非常大时,主要的成本通常是速度。 进行拉动和推挤的时间从喝一杯咖啡到怀疑您的计算机是否被踢出网络需要多长时间。

静态内容导致Git增大的原因是基于文本的格式允许Git仅提取已更改的部分。 如果您查看.png或.wav文件中包含的二进制数据,则光栅图像和音乐文件对Git的意义就和对您而言一样。 因此,即使从一张照片到另一张照片只有一个像素变化,Git仍会获取所有数据并对其进行新的复制。

Git门户

实际上,许多多媒体项目不需要或不想跟踪媒体的历史。 项目的媒体部分往往具有与项目的文本或代码部分不同的生命周期。 媒体资产通常朝一个方向发展:一幅画是从铅笔素描开始,以数字绘画的形式走向目的地,即使文本回滚到较早的版本,艺术也继续向前发展。 媒体很少绑定到项目的特定版本。 例外情况通常是反映数据集(通常是表格,图形或图表)的图形,这些图形可以以基于文本的格式(例如SVG)完成。

因此,在涉及媒体和文本(无论是叙述性散文还是代码)的许多项目中,只要在版本控制周期之外还有一个供艺术家玩耍的场所,Git是可接受的文件管理解决方案。

一种简单的启用方法是Git-portal ,它是一个带有Git钩子的Bash脚本,可将您的资产文件移动到Git权限范围之外的目录中,并用符号链接替换它们。 Git提交符号链接(有时称为别名或快捷方式),这些符号链接很小,因此,您提交的所有内容都是文本文件,而任何符号链接都代表您的媒体资产。 因为替换文件是符号链接,所以您的项目将继续按预期运行,因为您的本地计算机将符号链接跟随到它们的“实际”副本。 当Git-portal用符号链接换出文件时,它会维护项目的目录结构,因此,如果您认为Git-portal不适合您的项目,或者需要构建项目的版本,则很容易逆转该过程。没有符号链接(例如,用于分发)。

Git-portal还允许通过rsync进行资产的远程同步,因此您可以将远程存储位置设置为集中的授权源。

Git-portal是多媒体项目的理想选择,包括视频游戏和桌面游戏设计,具有大型3D模型渲染和纹理的虚拟现实项目,具有图形和.odt导出功能的书籍 ,协作博客网站 ,音乐项目等等。 对于艺术家来说,在其应用程序中以图层(在图形世界中)和轨道(在音乐世界中)的形式执行版本控制并不少见,因此Git本身不会向多媒体项目文件添加任何内容。 Git的功能可用于艺术项目的其他部分(散文和叙事,项目管理,字幕文件,信用,市场营销副本,文档等),而艺术家可利用结构化远程备份的功能。

安装Git-portal

在https://klaatu.fedorapeople.org/git-portal上有Git-portal的RPM软件包,您可以下载并安装。

或者,您可以在GitLab上的家中手动安装Git-portal。 它只是一个Bash脚本和一些Git钩子(它们也是Bash脚本),但是它需要快速的构建过程,以便知道将其安装在何处:

$ git clone https://gitlab.com/slackermedia/git-portal.git git-portal.clone
$ cd git-portal.clone
$ ./configure
$ make
$ sudo make install

使用Git-portal

Git-portal与Git一起使用。 这意味着,与对Git的所有大文件扩展一样,还有一些需要记住的附加步骤。 但是在处理媒体资产时只需要Git-portal,因此除非您已经习惯于将大文件与文本文件一样对待(这对Git用户很少),否则记住它很容易。 要在项目中使用Git-portal,必须执行一个设置步骤:

$ mkdir bigproject.git
$ cd !$
$ git init
$ git-portal init

Git-portal的init函数在您的Git存储库中创建一个_portal目录,并将其添加到您的.gitignore文件中。

在日常工作中使用Git-portal可以与Git顺利集成。 一个很好的例子是基于MIDI的音乐项目:音乐工作站生成的项目文件是基于文本的,而MIDI文件是二进制数据:

$ ls -1
_portal
song.1.qtr
song.qtr
song-Track_1-1.mid
song-Track_1-3.mid
song-Track_2-1.mid
$ git add song*qtr
$ git-portal song-Track*mid
$ git add song-Track*mid

如果查看_portal目录,则会找到原始MIDI文件。 这些文件所在的位置是_portal的符号链接,它可使音乐工作站按预期方式工作:

$ ls -lG
[...] _portal/
[...] song.1.qtr
[...] song.qtr
[...] song-Track_1-1.mid -> _portal/song-Track_1-1.mid*
[...] song-Track_1-3.mid -> _portal/song-Track_1-3.mid*
[...] song-Track_2-1.mid -> _portal/song-Track_2-1.mid*

与Git一样,您也可以添加文件目录:

$ cp -r ~/synth-presets/yoshimi .
$ git-portal add yoshimi
Directories cannot go through the portal. Sending files instead.
$ ls -lG _portal/yoshimi
[...] yoshimi.stat -> ../_portal/yoshimi/yoshimi.stat*

删除工作正常,但是在_portal中删除内容时 ,应使用git-portal rm而不是git rm 。 使用Git-portal确保从_portal中删除文件:

$ ls
_portal/    song.qtr             song-Track_1-3.mid@  yoshimi/
song.1.qtr  song-Track_1-1.mid@  song-Track_2-1.mid@
$ git-portal rm song-Track_1-3.mid
rm 'song-Track_1-3.mid'
$ ls _portal/
song-Track_1-1.mid*  song-Track_2-1.mid*  yoshimi/

如果您忘记使用Git-portal,则必须手动删除门户文件:

$ git-portal rm song-Track_1-1.mid
rm 'song-Track_1-1.mid'
$ ls _portal/
song-Track_1-1.mid*  song-Track_2-1.mid*  yoshimi/
$ trash _portal/song-Track_1-1.mid

Git-portal唯一的其他功能是列出所有当前的符号链接,并查找可能已损坏的符号链接,如果文件在项目目录中移动,有时可能会发生这种情况:

$ mkdir foo
$ mv yoshimi foo
$ git-portal status
bigproject.git/song-Track_2-1.mid: symbolic link to _portal/song-Track_2-1.mid
bigproject.git/foo/yoshimi/yoshimi.stat: broken symbolic link to ../_portal/yoshimi/yoshimi.stat

如果您将Git-portal用于个人项目并维护自己的备份,那么从技术上讲,这就是您需要了解的有关Git-portal的全部信息。 如果您想添加协作者,或者希望Git-portal像Git一样(或多或少)管理备份,则可以使用远程服务器。

添加Git门户遥控器

通过Git现有的远程功能为Git-portal添加远程位置。 Git-portal实现了Git钩子(隐藏在存储库.git目录中的脚本),以查看远程目录中以_portal开头的任何脚本 。 如果找到一个,它将尝试rsync到远程位置并同步文件。 每当您执行Git推送或Git合并(或拉取,实际上只是获取和自动合并)时,Git-portal都会执行此操作。

如果您仅克隆了Git存储库,那么您可能永远不会自己添加远程服务器。 这是一个标准的Git程序:

$ git remote add origin git@gitdawg.com:seth/bigproject.git
$ git remote -v
origin git@gitdawg.com:seth/bigproject.git (fetch)
origin git@gitdawg.com:seth/bigproject.git (push)

名称起源是您的主要Git储存库的常用约定,因此将其用于Git数据很有意义。 但是,您的Git-portal数据是单独存储的,因此您必须创建第二个遥控器,以告知Git-portal推入和拉出的位置。 根据您的Git主机,您可能需要一台单独的服务器,因为空间有限的Git主机不太可能接受千兆字节的媒体资产。 或者,也许您所使用的服务器仅允许您访问Git存储库,而不能访问外部存储目录:

$ git remote add _portal seth@example.com:/home/seth/git/bigproject_portal
$ git remote -v
origin git@gitdawg.com:seth/bigproject.git (fetch)
origin git@gitdawg.com:seth/bigproject.git (push)
_portal seth@example.com:/home/seth/git/bigproject_portal (fetch)
_portal seth@example.com:/home/seth/git/bigproject_portal (push)

您可能不想为所有用户提供服务器上的个人帐户,也不必这样做。 要提供对托管存储库大文件资产的服务器的访问权限,可以运行Gitol前端(如Gitolite) ,也可以使用rrsync (即受限的rsync)。

现在,您可以将Git数据推送到远程Git存储库,并将Git-portal数据推送到远程门户:

$ git push origin HEAD  
master destination detected
Syncing _portal content...
sending incremental file list
sent 9,305 bytes  received 18 bytes  1,695.09 bytes/sec
total size is 60,358,015  speedup is 6,474.10
Syncing _portal content to example.com:/home/seth/git/bigproject_portal

如果您已安装Git-portal并配置了_portal远程,则_portal目录将被同步,从服务器获取新内容并在每次推送时发送新内容。 虽然您不必执行Git提交并推送与服务器同步(用户可以直接使用rsync),但我发现要求提交以进行艺术性更改很有用。 它将艺术家及其数字资产集成到工作流程的其余部分,并提供有关项目进度和速度的有用元数据。

其他选择

如果Git-portal对您来说太简单了,那么还有其他选项可以使用Git管理大型文件。 Git大文件存储 (LFS)是一个名为git-media的已停工项目的分支,并由GitHub维护和支持。 它需要特殊的命令(例如git lfs track以保护大型文件免遭Git跟踪),并且要求用户管理.gitattributes文件以更新LFS跟踪存储库中的哪些文件。 它支持大文件的HTTP和HTTPS远程,因此必须配置LFS服务器,以便用户可以通过HTTP而不是SSH或rsync进行身份验证。

比LFS更灵活的选项是git-annex ,您可以在我的文章中了解有关在Git中管理二进制Blob的更多信息(忽略有关已弃用git-media的部分,因为它以前的灵活性不适用于其后继者Git。 LFS)。 Git-annex是一种灵活而优雅的解决方案,它具有用于在存储库中添加,删除和移动大文件的详细系统。 由于它灵活而强大,因此有许多新的命令和规则需要学习,因此请查看其文档 。

但是,如果您的需求很简单,并且您喜欢使用现有技术来完成简单明显的任务的解决方案,那么Git-portal可能是完成此任务的工具。

翻译自: https://opensource.com/article/19/4/manage-multimedia-files-git

git 删除git管理

git 删除git管理_使用Git管理多媒体文件相关推荐

  1. commit git 删除文件夹_从Git提交中删除文件

    现有的答案都在谈论从上一次提交中删除不需要的文件. 如果要从旧提交(甚至推送)中删除不需要的文件,并且不想创建新提交,则由于该操作,这是不必要的: 1. 查找您要文件符合的提交. git checko ...

  2. android git提交整个项目_使用git管理嵌入式软件版本

    点击上方蓝字关注我哦- 你现在的Keil工程的版本控制是怎么管理的?可能有些人的做法是发布一个版本软件后将代码打一个包保存起来,作为此版本的备份.有一种常见的情况,当开始一项新功能的开发,并且最终的效 ...

  3. git 修改分支名字_基础Git操作与GitHub协作吐血整理,收好!| 原力计划

    作者 | 光子俊来源 | CSDN博客出品 | CSDN(ID:CSDNnews) Git介绍 Git是目前世界上最先进的分布式版本控制系统,可以为我们管理项目.构建工程.多人协作提供便利,作为一个爱 ...

  4. git gui 历史版本_这些Git命令都不会,还是不要去面试了

    前言 以下,项目中经常使用的Git命令,汇总到这里以便与你能快速的学习和掌握Git命令,在文章最后有惊喜哟,一定要看到最后啊! 使用的 Git版本:git version 2.24.0 命令 git ...

  5. git status怎么操作_新手 git 简明操作指南

    在工作中,我们可能需要采用 git 作为版本控制工具.所以对 git 的基本操作需要非常熟练,以至于我们能够应付工作上的需求.当然这里推荐一篇博文廖雪峰的git教程,有更详细的介绍.我这里对git的一 ...

  6. git托管怎么使用_使用Git构建和托管网站

    git托管怎么使用 Git是那些设法将大量现代计算封装到一个程序中的罕见应用程序之一,最终成为许多其他应用程序的计算引擎. 尽管它最着名的是跟踪软件开发中的源代码更改,但它还有许多其他用途,可以使您的 ...

  7. commit git idea 速度慢_关于Git,这篇文章还不够吗?

    Git 安装 Git下载地址: https://git-scm.com/downloads Git安装(Window/Mac): 选择不同系统安装包安装 检验是否安装成功: 出现Git Bash命令行 ...

  8. git 修改tag 备注_【Git】第十二章:Git高级实战技巧

    1.查看不同版本之间的代码差异 短SHA-1值 使用git命令来代表某个commit时,我们不一定就是要用40位完整的SHA-1 hash值,也可以只是提供hash值的前几位就可以了,至少要4位以上, ...

  9. git ssh配置文件 服务器_【GIT】日常开发中的这些Git技巧你知道吗?

    Git是目前世界上最先进的分布式版本控制系统 0 git安装 1)在github下载git的release版本 git-release 2)安装git的依赖文件 sudo apt-get instal ...

最新文章

  1. Shell循环与结构化命令
  2. 有关java的参考软件_Java的相关的排序实现(参考软件设计师教程)
  3. 二进制文件和ASCII文件有何差别
  4. SQLcode错误代码汇总和sqlstate=37000的解决方案
  5. PRML exercises 10.3 解析
  6. STM32单片机简介
  7. 大数据笔记--Spark机器学习(第一篇)
  8. Odoo 序列和工作流
  9. 台式计算机蓝牙完成配对,电脑蓝牙已配对但连不上 带你快速解决一下
  10. 企业面临大危机,CRM崩溃告急,程序员竟用特殊手段化解危机!
  11. 记得十年前谷歌大量使用python_关于利用Python玩转百万答题
  12. JAVA知识整理(一)
  13. MySQL 02 初体验
  14. 刘备和诸葛亮闹翻:无意说出蜀国灭亡的根源?
  15. 计算机在条形码的应用,常用一维条码及其应用领域介绍
  16. php简单的购物车,利用PHP实现一个简单购物车的demo示例代码
  17. 阿里旺旺2012聊天获取(买家版)
  18. 2018年下半年网络工程师考试试题分析(3)
  19. svn提示*out of date
  20. 跑分cpu_【新机】天玑800+跑分性能出炉:CPU干翻骁龙765G,比肩麒麟985 | 骁龙768G性能曝光...

热门文章

  1. 32个c语言关键字发音,加注汉语发音的C语言32个语句和9种控制语
  2. 底物的分子描述符计算及 CYP450 酶-底物选择性技术研究
  3. 7-176 数列求和
  4. TPT又一次重量级更新——TPT16使嵌入式测试变得更加轻松
  5. 【Minecraft开服教程】使用 MCSM 面板一键搭建我的世界服务器,并内网穿透公网远程联机
  6. Matplotlib 常用可视化操作
  7. 第16套题目 doc.计算机,计算机二级ms实操题excel难点汇总.doc
  8. SVN怎么去掉版本控制,去除调svn绿色图标显示
  9. golang的ping检测主机存活
  10. 如何使用UltraISO制作U盘系统盘用于重装系统