Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial hg grep不检查已删除的文件_Mercurial - Fatal编程技术网

Mercurial hg grep不检查已删除的文件

Mercurial hg grep不检查已删除的文件,mercurial,Mercurial,我一直在尝试从存储库的历史记录中删除大型文件。问题是我无法让这个hg grep命令工作: hg grep-l“*”集:大小('>10MB')” 具体来说,它无法打印当前工作目录中不存在的任何文件。如果在过去的任何时候Ihg rm'd文件,则此命令不会列出该文件。如果在删除给定文件之前更新到变更集,则它确实正确列出了该文件。我一直在仔细阅读hg grep的文档,但我不明白为什么它会忽略在某个时候从存储库中删除的文件。检查不再在工作目录中的文件似乎是hg grep的全部目的 是否有任何方法可以让hg

我一直在尝试从存储库的历史记录中删除大型文件。问题是我无法让这个
hg grep
命令工作:

hg grep-l“*”集:大小('>10MB')”

具体来说,它无法打印当前工作目录中不存在的任何文件。如果在过去的任何时候I
hg rm
'd文件,则此命令不会列出该文件。如果在删除给定文件之前更新到变更集,则它确实正确列出了该文件。我一直在仔细阅读
hg grep
的文档,但我不明白为什么它会忽略在某个时候从存储库中删除的文件。检查不再在工作目录中的文件似乎是
hg grep
的全部目的


是否有任何方法可以让
hg grep
检测删除的文件,或者通常可以获取一个列表,列出在给定文件大小范围内提交到存储库的所有文件,即使这些文件已被删除?

我最终放弃了使用
hg
命令执行此操作,只使用了以下bash脚本:

#! /bin/bash

EndRevision=568  # Latest Revision
Repository="/path/to/repository"

mkdir -p "Results"

for i in $(seq 0 "$EndRevision") ; do
    echo " --- Doing revision $i of $EndRevision ---"
    hg up -C -R "$Repository" -r "$i"
    find $Repository/* -type f -exec du -ah {} + > "Results/From${i}"
done
连同以下一个班轮:

cat Results/From* | sort -hr | uniq | head -n 25
它很好地满足了我的需要(在存储库历史记录中确定了一个大型文件的综合列表)。

hg locate-r“set…
可能更容易


hg locate“set:size('>10MB')”-r:“

虽然iondune的解决方案有效,但在相当大的回购上可能需要很长的时间。更快的解决方案是直接查看hg的元数据。从项目工作目录:

$ find ./.hg/store/data -type f -exec du -ah {} + | sort -hr | head -n 20

这将给出差异最大的20个文件的列表。存储库中实际文件与它们作为Mercurial元数据存储的方式之间的映射是。

您是否使用
--all
选项?不确定这是否重要。@Edward我想可能,但使用
hg grep--all-l.*”“set:size('>10MB'))“
我仍然只看到当前工作目录中存在的文件。我刚刚测试:
hg locate
hg grep
有相同的问题,它不会显示截至当前提示已删除的文件。