文件名模式和文件集与Mercurial中的.hgignore冲突

时间:2011-12-15 01:46:15

标签: mercurial

我在.hgignore上有以下内容:

syntax: glob
*

以及myfiles.txt上的以下内容:

.zshrc                                                                                                                                     
.zprofile                                                                                                                                  
glob:.less*                                                                                                                                
glob:.emacs*/**                                                                                                                            
glob:src*/**                                                                                                                               
glob:.bash*                                                                                                                                
.inputrc                                                                                                                                   
.ssh  

如果我尝试使用File Name patternsmyfiles.txt中的文件添加到Mercurial存储库中:

hg add listfile:myfiles.txt

File Sets

hg add "set: 'listfile:myfiles.txt' "

它不起作用; Mercurial什么都不打印,也不添加任何文件。

但是,一旦我从*删除.hgignore,上述两个陈述就会起作用,这很奇怪,因为我认为明确的hg add应覆盖.hgignore上的任何内容。

目标:

除了上面是否有预期的Mercurial行为之外,我的目标是让Mercurial忽略所有文件,除了我从控件文件中明确添加的文件,例如myfiles.txt我可以使用glob模式。有没有办法在Mercurial中做到这一点?

更新

我不确定为什么某些文件模式适用于@smooth雷鬼。正如@Martin在下面所说,他能够重现上面的行为,其中文件模式似乎与“.hgignore”发生冲突,就像他们为我做的那样(即Mercurial尊重.hgignore而不管explit {{1}命令)。

为了澄清,我在Linux上运行Mercurial版本 2.0.1 ,我在Red Hat和Ubuntu上试过这个。

1 个答案:

答案 0 :(得分:2)

@intrpc,我正在使用TortoiseHg 2.1.3 / Mercurial 1.9.2,我能够得到一个类似的样本:我有一个名为.sample的文件和另一个两个级别的文件{{1} };我的foo/bar/Foo.txt位于上方。与您的patterns.txt相同,我针对两种情况运行.hgignore然后hg init

    含有hg add listfile:..\patterns-for-hg.txt

  1. patterns.txt

    在这种情况下,.sample glob:foo/** 告诉我,Mercurial已将hg status添加到存储库但跳过了.sample

  2. 含有foo/bar/Foo.txt

  3. patterns.txt

    在这种情况下,.sample path:foo/bar/Foo.txt 告诉我,Mercurial已将hg status.sample添加到存储库

  4. 上面的(2)中的行为似乎对我有意义,因为如果您使用文件的完整路径调用foo/bar/Foo.txt,Mercurial将忽略.hgignore(这是“显式添加”你指的是)。

    我能想到的(1)中的行为的唯一解释是hg add中的glob被视为通配符,而不是精确的模式;因此,patterns.txt尊重hg add和确切路径(.hgignore),而不是其他任何内容。

    这些当然是猜测;所以任何更有资格的人的回应都会受到欢迎。