如何从版本控制中删除具有特定扩展名的所有文件?

时间:2013-10-21 16:10:35

标签: bash shell version-control mercurial

我在 Linux 下使用 Mercurial 。我想从版本控制系统中排除包含模式*.pro.user*的所有文件。

我尝试列出所有文件:

find . -name "*.pro.user*"

这也发现了.hg文件夹中的一些结果:

...
./.hg/store/data/_test_run_multiple/_test_run_multiple.pro.user.i
./.hg/store/data/_test_non_dominated_sorting/_test_sorting.pro.user.i
./Analyzer/AlgorithmAnalyzer.pro.user
./Analyzer/AlgorithmAnalyzer.pro.user.a6874dd
...

然后我尝试将此结果传递给 hg forget 命令,如:

find . -name "*.pro.user*" | hg forget

但我明白了:

abort: no files specified

我的猜测是需要以某种方式处理列表才能传递给hg forget

我想问一下:

  1. 如何将查询结果传递到hg forget命令?

  2. 由于查询结果包含“私人”文件夹.hg中的文件,这是个好主意吗?我希望Mercurial会忽略这个请求,但是我会以某种方式删除这些结果吗?

2 个答案:

答案 0 :(得分:3)

尝试以下方法:

hg forget "set:**.pro.user*"

这告诉Mercurial忘记任何与文件集**.pro.user*匹配的文件。由于文件集是在Mercurial中定义的,因此它不会进入.hg目录。通过查看:hg -v help filesets

,您可以使用文件集做更多事情

开始时的**意味着在子目录中工作,而不仅仅是当前目录。

答案 1 :(得分:2)

首先,您可以使用find * -name "*.pro.user*"来避免查看.hg

Mercurial的forget命令在命令行中需要它的参数。所以你需要使用xargs

find * -name "*.pro.user*" | xargs hg forget

或者,您可以要求find完成这项工作:

find * -name "*.pro.user*" -exec hg forget {} \;

最后,您应该将*.pro.user*添加到.hgignore文件中。