我在 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
。
我想问一下:
如何将查询结果传递到hg forget
命令?
由于查询结果包含“私人”文件夹.hg
中的文件,这是个好主意吗?我希望Mercurial会忽略这个请求,但是我会以某种方式删除这些结果吗?
答案 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
文件中。