2013-04-25 647 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。

相關問題