我有一个存储库,用于存储一些越来越大的大型二进制文件(tif、jpg、pdf)。还有相当数量的文件被创建、删除和重命名,我不关心单个提交历史。这个问题有些简化,因为我正在处理一个没有分支和标签的存储库。
我很好奇是否有一种简单的方法可以从系统中删除一些历史记录以节省空间。
我找到了一个旧线程 on the git mailing list但它并没有真正指定如何使用它(即 $drop 是什么):
git filter-branch --parent-filter "sed -e 's/-p $drop//'" \
--tag-name-filter cat -- \
--all ^$drop
最佳答案
我想,你可以按照这个答案缩小你的历史:
How to delete a specific revision of a github gist?
决定要保留历史上的哪些点。
pick <hash1> <commit message>
pick <hash2> <commit message>
pick <hash3> <commit message> <- keep
pick <hash4> <commit message>
pick <hash5> <commit message>
pick <hash6> <commit message> <- keep
pick <hash7> <commit message>
pick <hash8> <commit message>
pick <hash9> <commit message>
pick <hash10> <commit message> <- keep
然后,将每个“keep”之后的第一个保留为“pick”,并将其他标记为“squash”。
pick <hash1> <commit message>
squash <hash2> <commit message>
squash <hash3> <commit message> <- keep
pick <hash4> <commit message>
squash <hash5> <commit message>
squash <hash6> <commit message> <- keep
pick <hash7> <commit message>
squash <hash8> <commit message>
squash <hash9> <commit message>
squash <hash10> <commit message> <- keep
然后,通过保存并退出编辑器来运行 rebase 。在每个“keep”点,消息编辑器将 pop 一个组合的提交消息,范围从之前的“pick”到“keep”提交。然后,您可以只保留最后一条消息,或者实际上将它们组合起来以记录原始历史记录,而不保留所有中间状态。
在那次 rebase 之后,中间文件数据仍将在存储库中,但现在未被引用。 git gc
现在确实可以让您摆脱这些数据。
关于git - 从 git 存储库中删除旧的提交信息以节省空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12865332/