2010-11-19 111 views
4

通过搜索,我发现如何让Mercurial忽略位于存储库目录的根目录中的某些目录(以及它们包含的文件/目录),但我无法工作了解如何将其扩展到目录,这些目录是中的几个级别。让Mercurial忽略除某些子目录之外的所有内容

在这种情况下,我只希望版本控制以下目录:

app/design/frontend/rc 
skin/frontend/rc 

其结果是,我的.hgignore文件看起来像这样。

syntax=regexp 
^(?!(app(/|$))|(skin(/|$))) 
^app/code 
^app/design/adminhtml 
^app/design/frontend/base 
^app/design/frontend/default 
^app/design/install 
^app/etc 
^app/locale 
^app/Mage.php 
^app/.htaccess 
^skin/adminhtml 
^skin/frontend/base 
^skin/frontend/default 
^skin/install 

我敢肯定有这样做,不涉及应用程序和皮肤中挑选出的其他目录的一个更好的方法,并作为我可能会想为我想了几个项目做我会在这里问。谢谢。

+0

指甲有正确的答案。不要在正则表达式语法中使用否定断言,只需忽略“。*”,然后手动“添加”您想要跟踪的文件。添加覆盖'.hgignore',所以一旦你添加它们就好像你在正则表达式中制作了一个不可读的异常。 – 2010-11-19 14:51:10

+0

早些时候,当我对负面断言进行抨击时,感觉就像我非常接近,但它不适用于嵌套目录。如果我能找到如何做的话,那么每次添加新文件时都会手动添加所需的目录/文件。 – 2010-11-19 15:15:37

+0

在更新我的答案时,我注意到了.hgignore中的一个错字。它应该是'syntax:regexp',而不是'syntax = regexp'。 – 2010-11-19 15:27:42

回答

3

手动将您想要的目录添加到您的存储库,然后忽略其他所有内容。

hg init 
hg add app/design/frontend/rc 
hg add skin/frontend/rc 

然后在您的.hgignore:

syntax: glob 

** 
+0

感谢您的回答。据我了解,这意味着每次添加新文件时都必须手动添加这些目录/文件,这就是为什么我仍然希望能够得到否定断言的工作原因。 – 2010-11-19 15:01:18

+0

@David Oliver他并不意味着将它们添加到忽略文件,他意味着将它们添加到提交中的回购。 Mercurial不会自动开始跟踪目录中的每个文件。它知道它在那里,但不知道该如何处理它。 – msarchet 2010-11-19 15:27:57

+1

@msarchet:谢谢,但我意识到这一点。我试图避免必须明确告诉Mercurial在我想要版本控制的目录中添加新文件。 – 2010-11-19 15:36:57

相关问题