微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从git存储库中删除旧版本的媒体文件

如何解决如何从git存储库中删除旧版本的媒体文件

| 我有一个Git存储库,其中包含几个巨大的媒体文件(图像和音频文件)。这些媒体文件的多个版本已被连续提交到仓库中。这些文件是相同资产的连续精炼版本,并且具有相同的名称。 我只想在Git存储库中保留最新版本,因为它太大了。 最简单的方法是什么? 如何将这些更改正确传播到上游存储库?     

解决方法

        我有一个脚本(此处为github要点),可从git repo的整个历史记录中删除一些不需要的文件夹,或删除除最新版本以外的所有文件夹。 很难假设所有git存储库都位于
~/repos
中,但这很容易更改。它也应该很容易适应于处理单个文件。     ,        旧线程,但万一有人跌跌撞撞在这里… GitHub和Bitbucket都建议使用BFG Repo-Cleaner。 看到: GitHub:删除敏感数据 Bitbucket:减少存储库大小并 Bitbucket:维护Git存储库 删除超过1 MB的文件以及不包含在HEAD中的jpg,png和mp3的示例:
# First get the latest bfg.jar,then:
$ git clone --mirror git://example.com/some-big-repo.git
$ java -jar bfg.jar --strip-blobs-bigger-than 1M --delete-files \'*.{jpg,png,mp3}\' some-big-repo.git
$ cd some-big-repo.git
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive
$ git push
注意:现在您已经推送了更新的转速,远程存储库也应该运行它的
git gc
…否则您将看不到大小的减少。 (例如参见https://stackoverflow.com/a/28782154/3419541) 最后,重新克隆存储库,以确保您不会意外地重新提交旧的媒体文件Blob。     ,        检查ProGit书中“维护和数据恢复”一章中“删除对象”部分。它提供了有关如何从git repo中删除对象的步骤。但请注意,它具有破坏性。     ,        如前所述,您将在这里重写历史记录,因此您将需要合作者(如果有)来执行
git rebase
。 至于从历史记录中剥离特定文件,Github有一个很好的演练。 对于未来的解决方案,您应该查看将二进制文件放入子模块中。   Git \的子模块支持允许存储库包含外部项目的签出作为子目录。子模块保持自己的身份;子模块支持仅存储子模块存储库的位置和提交ID,因此其他克隆包含项目(\“ superproject \”)的开发人员可以轻松地克隆相同版本的所有子模块。可以对超级项目进行部分检出:您可以告诉Git不克隆任何,部分或全部子模块。 https://git-scm.com/docs/git-submodule https://git-scm.com/book/zh/v2/Git-Tools-Submodules     ,        据我所知,这是不可能完成的,因为在git中,每次提交都依赖于整个历史的内容。因此,摆脱旧的大文件的唯一方法是“重播”整个提交历史记录(最好是具有相同的提交时间戳和作者),而忽略大文件。请注意,这将产生完全独立的提交历史记录。 这显然不是一个非常可行的方法,因此该课程可能是“不要使用git对巨大的二进制文件进行版本控制”。相反,您可能为文件提供了一个单独的(忽略)文件夹,并使用了一个单独的系统来对文件进行版本控制。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?