【问题标题】:How can I remove the history of one file in git, leaving only the most recent version?如何删除 git 中一个文件的历史记录,只保留最新版本?
【发布时间】:2013-04-25 17:33:59
【问题描述】:

我在 git 存储库中有一个大型二进制文件,在几次提交中已更改。这些提交还包括对其他文件的更改。我希望存储库中只有最新版本的二进制文件,但希望保留在这些提交中更改的其他文件的历史记录。

所有有问题的提交都已经被推送到 github,并被团队的其他成员从他们那里拉出来。

我该怎么做?

编辑:我不认为这是另一个引用问题的重复。正如下面的 cmets 中所述,我已经查看了该问题,但想要删除文件的每个版本除了最新版本。其他问题的答案中未涉及此标准。

【问题讨论】:

  • @Andrew Neitsch,我看了那个问题,但我不想清除文件的整个历史记录——我只想保留最新版本。该方法是否会删除文件的整个历史记录,然后将文件的当前版本添加回存储库?
  • 是的,可以。但是如果这个大文件之前已经改变了,它很可能会再次改变。鉴于从 git 中清除文件的复杂性,您可能希望将其完全保留在此源存储库之外。另见Github help: What is my disk quota?
  • 我不同意这个问题重复了stackoverflow.com/q/2100907/438886 - @greg 特别指出他已经看过这个问题,并区分他想要删除文件的每个版本除了最近的一个 - 参考问题的答案中未提及的标准。

标签: git git-rewrite-history


【解决方案1】:

最简单的方法是使用The BFG Repo-Cleaner,它是git-filter-branch 的更快、更简单的替代方案,专为从 Git 存储库中删除大文件而设计。

您应该仔细按照usage 的说明进行操作,但主要步骤就是这样——下载the Java jar(需要Java 7 或更高版本)并运行以下命令:

$ java -jar bfg.jar  --strip-blobs-bigger-than 100MB  my-repo.git

任何大小超过 100MB 的 blob 都将从您的存储库的历史记录中完全删除 - 除非它是您最近提交的文件树中存在的版本,因此您的最新版本将根据需要保持不变。

BFG 也比 10-50x 快​​ git-filter-branch

全面披露:我是 BFG Repo-Cleaner 的作者。

【讨论】:

    【解决方案2】:

    不要试图过滤除最新版本之外的所有版本,只需从您的回购历史记录中删除文件并重新添加最新版本:

    考虑跟踪此文件。 Git 不适用于大型二进制 blob。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 2020-02-11
      • 2017-10-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多