我开始了一个项目,并将其添加到Mercurial中。但是我只想将*.cs
文件纳入版本控制。因此,我必须将bin
、obj
、sln
、suo
、_resharper
文件夹等添加到忽略模式中。
如何让Hg仅监视某种类型的文件,就像白名单一样?在Subversion中如何做到这一点?
我开始了一个项目,并将其添加到Mercurial中。但是我只想将*.cs
文件纳入版本控制。因此,我必须将bin
、obj
、sln
、suo
、_resharper
文件夹等添加到忽略模式中。
如何让Hg仅监视某种类型的文件,就像白名单一样?在Subversion中如何做到这一点?
当你遇到它们时,只需将扩展名添加到你的.hgignore
文件中:
syntax: glob
*.bin
*.obj
等等。这不是很多工作,它记录了您认为不重要的文件类型,以便于向世界展示。
您甚至可以设置全局忽略文件,请参见[ui]
部分中的ignore
条目。
试图通过使用负向前瞻正则表达式和其他巫术来颠倒.hgignore
(在我看来)并不是一个好主意。这几乎肯定不起作用,只会导致混淆。这是因为hg
将给定路径名称的所有前缀与.hgignore
规则匹配。因此,像这样的文件
a/b/c.cs
将被忽略。
a/b/c.cs
a/b
a
如果你的 .hgignore
文件中有一条规则与之匹配,那么这意味着你不能使用负向前瞻表达式来使 a/b/c.cs
不被忽略 -- 规则会匹配 a/b
或者 a
。
关于Martin Geisler提供的一个Mercurial问题链接(https://www.mercurial-scm.org/bts/issue712),请注意该问题不是技术难题,而是支持问题:
这是一个古老而经常出现的功能请求,我在创建此错误之前就已经拒绝了。我编写并支持了几个包含/排除文件语法,并决定宁愿对1%的用户说“不,你不能那样做”,也不要对20%的用户反复说“不,你正在错误地阅读文档”。 ——Mercurial的开发者Matt Mackall
^\.cs
正则表达式将使 hg
忽略存储库根目录中名为 .cs
的文件。它不会使 hg
忽略所有不匹配 *.cs
(glob 模式)的文件。 - Martin Geisler