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之间的关系 Graphic showing relationship between art assets and Git](https://i-blog.csdnimg.cn/blog_migrate/f943640b577de7e7f682f69e22ed17dc.jpeg)
一种简单的启用方法是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管理