如何在Mercurial中grep特定修订版中的特定文件(在该修订版中保持不变)

时间:2015-09-23 20:48:31

标签: mercurial

我有几个存储库,我正在构建一个与之交互的工具。我无法找到一种方法来grep特定修订版中的特定文件,该文件在该修订版中没有变化。

hg grep的帮助表示-r选项-r --rev REV [+] only search files changed within revision range。如果我更新有问题的版本,我可以适当地进行grep,并获得所需的结果。因为我的文件在该修订版中没有变化,所以它不会受到影响。有谁知道这样做的方法?

我的最终目标是我想忽略符合某种模式匹配的文件。我不确定使用--all选项是否可行,因为我必须解析模式出现并消失的修订版。

提前致谢。

修改 我正试图解决的实际问题:

存储库中有几个标记的修订版。

对于每个标记的修订版本,我想将一个特定的文件(假设为source/a.c或类似的东西)提取到其他人可以访问的文件夹结构(我们小组以外的人的网站,我们是谁不能给存储库访问权限。)

但是,如果文件不包含特定模式,我只想提取文件。这就是为什么我想检查特定版本的文件,即使它没有改变。

1 个答案:

答案 0 :(得分:0)

是的,hg grep确实不分析特定修订版的文件内容,但仅在文件实际更改时。因此,我建议采用略有不同的方式:

获取要检查的修订版本:

hg log -r"tag()" --template="{rev}\n"

以这种方式使用它(而不是标记)还允许查看未标记的修订。如果它只是标签,你可以直接使用hg tags命令:`hg tags --template =" {tag} \ n"。这将使小脚本中的$ i成为一个不错的标签名称,而不是修订版:)

您可以使用此列表在相应的修订版中获取文件FILENAME,然后您需要一些小脚本来实际检查该文件以查找相关内容:

for i in $(hg log -r"tag()" --template="{rev}\n"); do
  if hg cat FILENAME -r$i 2>/dev/null | grep PATTERN > /dev/null; then 
    hg cat FILENAME -r$i > path/to/whereever/FILENAME.$i
  fi
done