【问题标题】:Script to remove history for all binary files in Git, without removing file itself删除 Git 中所有二进制文件历史记录的脚本,而不删除文件本身
【发布时间】:2011-01-22 06:12:49
【问题描述】:

假设我有一个巨大的 git 存储库,其中有许多 swf 和图像。我希望将它们包含在托管的 github 存储库中,但不需要对其进行版本控制,并且我不想将它们存储在其他地方。

每次提交到存储库时,我可以删除他们的历史记录的最简单方法是什么? ...这样,最后,我拥有了所有的 swf 和图像,但没有它们的历史记录。

编辑:swf 文件可能经常更改,因此我们可以指望每次提交都有不同的版本。

【问题讨论】:

  • 为什么不提交源代码而不是编译后的二进制文件?
  • 我在考虑如何利用 GithubPages 而不必使用 S3 之类的东西来托管资产。假设我有一个包含 1000 多个 Flex 项目示例的静态博客,并且我想展示演示 swf。最简单的事情就是将它包含在存储库中。接下来是将其加载到某个免费站点或设置 S3。在那种情况下,我不能只显示来源。

标签: git history github


【解决方案1】:

不是直接回答,但我不确定这里是否有问题:

如果您的 swfs 和图像文件没有移动,它们将在提交后具有相同的 SHA1 提交。它们将占用相同的磁盘空间并引用相同的 blob。
根据GitPro book

“blob”对象只不过是一大块二进制数据。它不引用任何其他内容或具有任何类型的属性,甚至没有文件名。

由于 blob 完全由其数据定义,如果目录树(或存储库的多个不同版本)中的两个文件具有相同的内容,它们将共享同一个 blob 对象
对象完全独立于其在目录树中的位置,重命名文件不会更改文件关联的对象。

如果您的“资源”文件(swf 和图像)随时间演变,记录它们的历史很有趣,以便能够及时返回并查看连贯的配置(即源 + 资源在当时有效)

【讨论】:

    【解决方案2】:

    如果不破坏完整存储库时间线的 SHA1 完整性,则无法删除“历史记录”。这是 Git 最强大的功能之一:每个提交 id 都是根据其完整的历史时间线构建的哈希。

    但据我所知,二进制对象存储在某种差异中,因此不会浪费太多存储空间 - 如果您担心的话。

    如果您只是想将大的二进制数据排除在外并将其托管在其他地方,请尝试使用子模块。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-23
      • 2014-06-19
      • 2020-03-20
      相关资源
      最近更新 更多