如何确定哪个规则导致文件在Mercurial中被忽略?

时间:2014-04-02 04:01:20

标签: mercurial hgignore

Mercurial目前忽略了一个我认为不应该被忽视的文件。 .hgignore文件非常大,经过粗略的阅读后,哪个规则是罪魁祸首并不明显。

有没有办法让Mercurial告诉我.hgignore中的哪些规则(如果有的话)匹配文件?

1 个答案:

答案 0 :(得分:12)

您无法开箱即用,但您可以为此编写Mercurial扩展程序。

我已经写了扩展名hg-isignored,可以显示.hgignore中哪些规则与指定的文件夹或文件匹配。

<强>安装

在某处克隆扩展源,即在~/.hgrc.d/hg-isignored文件夹中:

hg clone https://hg@bitbucket.org/rpeshkov/hg-isignored ~/.hgrc.d/hg-isignored

.hgrc文件的扩展程序部分添加扩展程序:

isignored=~/.hgrc.d/hg-isignored/hg-isignored.py

现在,Mercurial将能够使用通过扩展程序实现的isignored命令。

<强>用法

当您在Mercurial存储库中时,运行命令hg isignored PATH,而不是PATH插入要检查的文件夹或文件,即hg isignored readme.txt。扩展将告诉您是否忽略指定的PATH并显示已使用的规则。

<强>测试

初​​始化

[~/hgtest]% hg init

没有.hgignore

[~/hgtest]% touch readme.txt
[~/hgtest]% hg st  
? readme.txt
[~/hgtest]% hg isignored readme.txt
abort: .hgignore file not found

添加.hgignore

[~/hgtest]% echo "syntax: glob" > .hgignore
[~/hgtest]% echo "readme.txt" >> .hgignore
[~/hgtest]% hg st
? .hgignore
[~/hgtest]% hg isignored readme.txt
Path 'readme.txt' is ignored by:
relglob:readme.txt

不会忽略文件

[~/hgtest]% touch readme2.txt
[~/hgtest]% hg isignored readme2.txt
Path 'readme2.txt' is not ignored

忽略文件夹

[~/hgtest]% mkdir build
[~/hgtest]% touch build/keep.txt
[~/hgtest]% echo "build/" >> .hgignore
[~/hgtest]% hg st
? .hgignore
? readme2.txt
[~/hgtest]% hg isignored build
Path 'build' is ignored by:
relglob:build/
[~/hgtest]% hg isignored build/keep.txt
Path 'build/keep.txt' is ignored by:
relglob:build/

忽略文件夹中的所有内容

[~/hgtest]% echo "syntax: glob" > .hgignore
[~/hgtest]% echo "build/*" >> .hgignore
[~/hgtest]% hg st
? .hgignore
? readme.txt
? readme2.txt
[~/hgtest]% hg isignored build
Path 'build' is not ignored
[~/hgtest]% hg isignored build/keep.txt
Path 'build/keep.txt' is ignored by:
relglob:build/*