Mercurial .hgignore正则表达式匹配文件夹及其子文件夹中的特定文件名

时间:2013-09-16 09:33:01

标签: regex mercurial hgignore

我的Mercurial文件夹结构是这样的,其中“temp”位于文件夹的根目录中。

temp
|   1world
|   world
|   world.txt
|           
+---sub1
|       1world
|       world
|       world.txt
|       
+---sub2
+---sub3
|       misc.txt
|       other
|       otherfile.txt
|       
\---sub4
        world

我想忽略temp文件夹及其子文件夹中的所有内容,除了名为“world”的文件(仅“world”而不是“1world”或“world.txt”等)。

使用语法:.hgignore中的regexp,我可以匹配temp>世界使用^temp/(?!world$),但我无法正确获取完整的正则表达式字符串(以匹配所有临时子文件夹中的世界)。

非常感谢任何指导!


更新

我设法通过手动列出每个文件夹来获得我想要的结果:

^temp/(?!world$|sub1|sub2|sub3|sub4)
^temp/sub1/(?!world$)
^temp/sub2/(?!world$)
^temp/sub3/(?!world$)
^temp/sub4/(?!world$)

但是,如果我可以将所有子文件夹中的world与模式匹配,我会更喜欢它,因为当事情发生变化时很容易忘记更新.hgignore。

1 个答案:

答案 0 :(得分:0)

如果您必须列出所有文件夹,则应将.放入.hgignore,这意味着忽略所有内容,然后hg add world个文件想。

.hgignore只会影响您在执行hg status时看到的未添加的文件,但是如果必须为每个不想忽略的文件添加条目然后你还没有看到你需要添加的world个文件。因此,不要在.hgignore had add path_to_new_folder/world添加另一行。

添加文件后.hgignore对其完全没有影响。

所以从一开始这个过程就是:

echo . > `.hgignore   # create a new hgignore file with just a single got in it
hg add **/world       # add all the files named exactly world
hg commit             # commit those world files

现在,您仍然可能忘记再次运行world而忘记添加新的hg add **/world文件,但至少比忘记添加更容易您.hgignore的另一个例外。