我可以从git存储库中展平已删除的文件吗?

时间:2016-05-08 09:47:00

标签: git

git version control system是一种分布式日志(与raft共识协议有一些概念上的相似之处)。

Raft和其他一些系统的概念为log compaction,因此冗余变更集不会减少整个变更日志。

我想要的是“批量清理”已删除的文件 - 不要隔离一个文件以进行排除。

我的问题是:我可以从git存储库中展平已删除的文件吗?

编辑:

  • 假设在我的历史记录中 - 我有五个独立的场景,有人在不同的时间点检查五个不同的100M二进制文件 - 而且每次有人进行克隆时我都不必下载。我正在寻找'大量清理我的回购中删除的文件',同时仍然保留我的回购。

2 个答案:

答案 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。