我在.hgignore
上有以下内容:
syntax: glob
*
以及myfiles.txt
上的以下内容:
.zshrc
.zprofile
glob:.less*
glob:.emacs*/**
glob:src*/**
glob:.bash*
.inputrc
.ssh
如果我尝试使用File Name patterns将myfiles.txt
中的文件添加到Mercurial存储库中:
hg add listfile:myfiles.txt
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上试过这个。
答案 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
的
patterns.txt
在这种情况下,.sample
glob:foo/**
告诉我,Mercurial已将hg status
添加到存储库但跳过了.sample
foo/bar/Foo.txt
的
patterns.txt
在这种情况下,.sample
path:foo/bar/Foo.txt
告诉我,Mercurial已将hg status
和.sample
添加到存储库
上面的(2)中的行为似乎对我有意义,因为如果您使用文件的完整路径调用foo/bar/Foo.txt
,Mercurial将忽略.hgignore
(这是“显式添加”你指的是)。
我能想到的(1)中的行为的唯一解释是hg add
中的glob被视为通配符,而不是精确的模式;因此,patterns.txt
尊重hg add
和确切路径(.hgignore
),而不是其他任何内容。
这些当然是猜测;所以任何更有资格的人的回应都会受到欢迎。