Mercurial中忽略文件夹内文件却保留文件夹?已尝试glob语法无效
解决Mercurial中忽略文件夹内文件但保留文件夹的问题
我明白你的困扰——本来只想忽略photos和photos/thumbs里的图片文件,结果连文件夹本身都被Mercurial无视了。其实问题出在Mercurial的一个特性上:它不会追踪空文件夹。当你用glob规则把文件夹里的所有目标文件都忽略后,这个文件夹就变成了空的,Mercurial自然不会把它纳入版本控制,看起来就像被忽略了一样。
下面是具体的解决步骤:
1. 确认你的.hgignore配置是正确的
你原来写的glob规则其实没问题,它只会匹配指定的图片文件,不会直接忽略文件夹:
photos/*.jpg photos/*.gif photos/thumbs/*.jpg photos/thumbs/*.gif
如果想简化写法,也可以用扩展glob(Mercurial默认启用该扩展):
photos/**/*.{jpg,gif}
这个规则会匹配photos目录下所有子文件夹里的jpg和gif文件,效果和你原来的规则一致,但更简洁。
2. 在需要保留的文件夹中添加.hgkeep文件
为了让Mercurial追踪这些文件夹,我们需要在每个目标文件夹里放一个被Mercurial追踪的空文件,约定俗成的名字是.hgkeep。
执行以下命令创建这个文件:
# 在photos目录下创建.hgkeep touch photos/.hgkeep # 在photos/thumbs目录下创建.hgkeep touch photos/thumbs/.hgkeep
3. 提交.hgkeep文件
把这两个空文件加入版本控制并提交:
hg add photos/.hgkeep photos/thumbs/.hgkeep hg commit -m "Add .hgkeep files to preserve photos folders"
这样操作之后,Mercurial会因为.hgkeep文件的存在而持续追踪photos和photos/thumbs文件夹,同时忽略你指定的所有图片文件,完美实现你想要的效果。
内容的提问来源于stack exchange,提问作者Paolo Rossi
相关产品推荐
相关产品推荐

