如何让Mercurial忽略除*.cs文件以外的所有内容?

8

我开始了一个项目,并将其添加到Mercurial中。但是我只想将*.cs文件纳入版本控制。因此,我必须将binobjslnsuo_resharper文件夹等添加到忽略模式中。

如何让Hg仅监视某种类型的文件,就像白名单一样?在Subversion中如何做到这一点?


Mercurial还是Subversion还是两者都用? - inerte
只使用Mercurial也可以,如果两个都会更好。 - prime23
3个回答

8

当你遇到它们时,只需将扩展名添加到你的.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


那么你的意思是说没有否定运算符? - Mike Caron
Mike:是的,不幸的是。如果您非常感兴趣,请查看此问题http://mercurial.selenic.com/bts/issue712并留下评论。 - Martin Geisler

1

关于Martin Geisler提供的一个Mercurial问题链接(https://www.mercurial-scm.org/bts/issue712),请注意该问题不是技术难题,而是支持问题:

这是一个古老而经常出现的功能请求,我在创建此错误之前就已经拒绝了。我编写并支持了几个包含/排除文件语法,并决定宁愿对1%的用户说“不,你不能那样做”,也不要对20%的用户反复说“不,你正在错误地阅读文档”。 ——Mercurial的开发者Matt Mackall


-2

在您的代码库中添加一个名为.hgignore的文件,并将以下内容添加到其中。

syntax: regexp

^\.cs

Subversion不允许您使用正则表达式来忽略文件,只能使用glob语法的子集来匹配文件/目录名称。我不知道如何使忽略文件不以.cs结尾,所以我在网上搜索了一下,这个网页说:

svn propset svn:ignore "*[!c][!s]
*.cs?*" .

请谨慎使用 :)

编辑:Martin Geisler是正确的,我错了,正则表达式语法是错误的。我很抱歉。正确的概念在那里,但元字符不在... :(


^\.cs 正则表达式将使 hg 忽略存储库根目录中名为 .cs 的文件。它不会使 hg 忽略所有不匹配 *.cs(glob 模式)的文件。 - Martin Geisler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接