git - 从 git 存储库中删除旧的提交信息以节省空间

标签 git

我有一个存储库,用于存储一些越来越大的大型二进制文件(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/

相关文章:

java - 如何更新当前项目在github上的仓库?

git - 如何使用 tig 查看已更改但未提交的文件的差异?

git - 在 Google Cloud Source Repositories 中重命名 Git 存储库

git - 'git commit --amend' 处于分离的 HEAD 状态

git - 如何在 ubuntu 上安装 git bash?

git - 我可以让 "git status"显示未跟踪文件的文件大小吗?

git.exe : error while loading shared libraries: ?:无法打开共享对象文件:没有这样的文件或目录

git - PHPStorm 使用私钥签署提交

linux - 创建本地 git 存储库失败

android - 推送后在 Github 上保护 API key