git version control system是一种分布式日志(与raft共识协议有一些概念上的相似之处)。
Raft和其他一些系统的概念为log compaction,因此冗余变更集不会减少整个变更日志。
我想要的是“批量清理”已删除的文件 - 不要隔离一个文件以进行排除。
我的问题是:我可以从git存储库中展平已删除的文件吗?
编辑:
答案 0 :(得分:0)
"假设在我的历史记录中 - 我有五个单独的场景,有人检查100M文件 - 而且每次有人做克隆时我都不必下载。"
Git已经这样做了。只要文件内容相同,其哈希值就相同。 Git使用哈希来识别文件,因此文件将解析为相同的哈希值,并且不会导致空间使用量增加。
另一方面,如果文件内容略有不同,则可能会保存或不保存空间,具体取决于它们在git树中的位置的各种详细信息,以及选项在执行git gc
时使用。 (假设文件是可扩展的。二进制文件可能是也可能不是。查找git delta压缩。)
说了这么多,git在很多方面都不适用于大型二进制文件(我假设100 MB文件是二进制文件,虽然它们可能不是),你可能想看看像{gid}中的git large files
或其他内容可以支持大文件,或者是git以外的scm。
答案 1 :(得分:0)
好的 - 这是要检查的事项列表:
你可以运行:
git gc
您可以使用以下方式获取信息:
git count-objects -v
有一个脚本here for git-fatfiles。
这是新仓库中recreating all the branches的脚本。
使用此功能,您可以列出大对象并对其进行排序:
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k3n
使用this,你可以找到哪个提交占用空间的blob。