我有几个存储库,我正在构建一个与之交互的工具。我无法找到一种方法来grep特定修订版中的特定文件,该文件在该修订版中没有变化。
hg grep
的帮助表示-r
选项-r --rev REV [+] only search files changed within revision range
。如果我更新有问题的版本,我可以适当地进行grep,并获得所需的结果。因为我的文件在该修订版中没有变化,所以它不会受到影响。有谁知道这样做的方法?
我的最终目标是我想忽略符合某种模式匹配的文件。我不确定使用--all
选项是否可行,因为我必须解析模式出现并消失的修订版。
提前致谢。
修改 我正试图解决的实际问题:
存储库中有几个标记的修订版。
对于每个标记的修订版本,我想将一个特定的文件(假设为source/a.c
或类似的东西)提取到其他人可以访问的文件夹结构(我们小组以外的人的网站,我们是谁不能给存储库访问权限。)
但是,如果文件不包含特定模式,我只想提取文件。这就是为什么我想检查特定版本的文件,即使它没有改变。
答案 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