在 Mercurial 存储库中查找大文件

Posted

技术标签:

【中文标题】在 Mercurial 存储库中查找大文件【英文标题】:Finding Large Files in Mercurial Repository 【发布时间】:2015-12-14 22:56:06 【问题描述】:

类似于this link,但用于善变。我想找到对我的 mercurial 存储库的大小贡献最大的文件。

我打算使用 hg convert 创建一个新的、更小的存储库。我只是不确定哪些文件会影响存储库的大小。它们可能是已经被删除的文件。

有什么好方法可以在存储库历史记录中的任何位置找到这些内容?有超过 20,000 个提交。我正在考虑一个 powershell 脚本,但我不确定最好的方法是什么。

【问题讨论】:

【参考方案1】:

检查hg help fileset。类似的东西

hg files "set:size('>1M')"

应该为您解决问题。您可能需要对所有修订进行操作,尽管它只对一个修订进行操作。在 bash 中,我会尝试类似

for i in `hg log -r"all()" "set:size('>400k')" --template="rev\n"`; do hg files -r$i "set:size('>400k')"; done | sort | uniq

可能会成功。也许它可以优化,因为它目前有点重复,可能会运行很长时间;在具有 22000 次提交的 OpenTTD 存储库上,在我的笔记本电脑上只用了不到 10 分钟。

(同时查看templatesfilesgrep上的hg帮助)

【讨论】:

谢谢,这很有效。我正在使用窗户。为完整起见,powershell 脚本为 hg log -r"all()" "set:size('>1024k')" --template="rev\n" | Foreach hg files -r $_ "set:size('>1024k')" >> results.txt; get-content results.txt | sort | get-unique > results2.txt; Remove-Item results.txt; Move-Item results2.txt results.txt ,而 bat 文件为 for /F %i in ('hg log -r"all()" "set:size('>1024k')" --template="rev\n"') DO hg files -r %i "set:size('>1024k')" >> results.txt(虽然不排序/过滤)

以上是关于在 Mercurial 存储库中查找大文件的主要内容,如果未能解决你的问题,请参考以下文章

提交后修复Mercurial存储库中的重命名

忽略Mercurial中文件的未来更改,但仍然跟踪它[重复]

在 Mercurial 存储库历史记录中快速查找已删除的文件?

Mercurial转换扩展无法从远程Git存储库中提取

Mercurial 补丁队列用例

mercurial push / pull问题