我的Mercurial文件夹结构是这样的,其中"temp"在文件夹的根目录中。
temp
| 1world
| world
| world.txt
|
+---sub1
| 1world
| world
| world.txt
|
+---sub2
+---sub3
| misc.txt
| other
| otherfile.txt
|
---sub4
world
我想忽略临时文件夹及其子文件夹中的所有内容,除了名为"世界"的文件(只有"世界"而不是"1world"或"world.txt"等)
使用语法:.hgignore 中的正则表达式,我可以使用 ^temp/(?!world$)
匹配临时>世界,但我无法正确获取完整的正则表达式字符串(以匹配所有临时子文件夹中的世界)。
任何指导将不胜感激!
更新
我设法通过手动列出每个文件夹来获得我想要的结果:
^temp/(?!world$|sub1|sub2|sub3|sub4)
^temp/sub1/(?!world$)
^temp/sub2/(?!world$)
^temp/sub3/(?!world$)
^temp/sub4/(?!world$)
但是,如果我可以用一种模式匹配所有子文件夹中的世界,我更喜欢它,因为当事情发生变化时很容易忘记更新 .hgignore 。
如果你无论如何都必须列出所有文件夹,你应该把.
放在你的.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
现在,您仍然有可能忘记再次运行hg add **/world
而忘记添加新的world
文件,但至少这比记住在.hgignore
中添加另一个例外更容易。