2013-04-25 646 views
4

我在一个git仓库中有一个很大的二进制文件,在一些提交中已经改变了。这些提交还包括对其他文件的更改。我想只有版本库中最新版本的二进制文件,但想保留在这些提交中更改过的其他文件的历史记录。如何在git中删除一个文件的历史记录,只保留最新版本?

所有提交的问题已经被推送到github,并被其他成员从他们的队伍中拉出。

我该怎么做?

编辑:我不认为这是其他引用问题的重复。正如在下面的评论中指出的那样,我已经看过这个问题,但是想要移除文件的所有版本,除了最近的文件。这个标准在另一个问题的答案中没有解决。

+0

@Andrew Neitsch,我看着这个问题,但我不想清除整个文件的历史 - 我只想保留最新的版本。方法是删除文件的整个历史记录,然后将当前版本的文件添加回存储库? – Greg 2013-04-25 17:43:37

+0

是的,这将工作。但是如果这个大文件之前发生了变化,它可能会再次改变。鉴于从git中清除文件的复杂性,您可能需要将其完全保留在源代码仓库之外。另请参见[Github上的帮助:什么是我的磁盘配额?](https://help.github.com/articles/what-is-my-disk-quota) – andrewdotn 2013-04-25 17:47:24

+1

我不同意,这个问题重复http://stackoverflow.com/q/2100907/438886 - @greg特别注意到他查看了这个问题,并区分出他希望删除该文件的每个版本_except_最近的一个 - 这个标准在所引用问题的答案中未得到解决。 – 2013-04-26 16:19:08

回答

3

最简单的方法是使用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 

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

该BFG也是10-50x快于git-filter-branch

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

1

而不是试图过滤所有,但最新的版本,从回购的历史只是核弹文件并重新添加最新版本:

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

相关问题