如何让Mercurial注意到添加到子目录中的文件?(hg st,hg add)

9
如果我在项目根目录中添加一个新文件,它会在 hg st 中显示为 ? 状态,并通过 hg add 添加。
但是,如果我将新文件添加到子目录中,则根本不会出现在 hg st 中,只有在显式添加文件时才会添加(即使添加文件所在的目录也不行)。
如何让 Mercurial 注意到子目录中的文件,类似于 Subversion 的方式?
谢谢。

这种情况发生在任何子目录中吗(即与其名称无关),还是只发生在特定的子目录中? - Oben Sonne
请提供一个具体的示例,从类似于我回答/猜测中的hg init开始,以说明问题。 - Mark Tolonen
hg status --all 是否会列出该文件的清单? - Matt
2个回答

15

使用纯粹的hg add命令而不添加额外的参数会将子目录中的文件也添加进来,它基本上会将所有状态未知的文件添加到跟踪列表中。

然而,如果你指定了一个简单的掩码,它只会在当前工作目录下操作(即hg命令的工作目录,而不是与存储库关联的工作目录),所以如果你当前位于子目录中,它将添加这些文件;如果你在根目录中,它会添加那些文件。

换句话说,这样做:

hg add test*

该命令仅作用于当前目录中的文件。

您可以通过指定掩码来覆盖此行为,以便告诉hg操作子目录:

hg add **/test*

这段话的意思是“添加当前目录及其子目录中所有匹配'test*'的文件。”

如果你移除一个星号,那么只会在当前工作目录下的子目录中操作。

如果你能提供你执行的具体命令、输出以及执行前后hg st的输出,那就更好了。


1
我没有应用任何掩码。我只是在子目录中添加一个文件,然后执行 hg st 命令,但是没有输出(甚至对于该文件也没有未知的 ? 状态)。如果我在根目录中做同样的事情,我会看到该文件有一个未知状态。值得一提的是,该子目录并没有被列入 .hgignore 文件中的忽略列表。 - GJ.
目录的名称是什么?文件的名称是什么?你能否发布你的.hgignore文件,以防万一? - Lasse V. Karlsen
哦,还要检查一下@Mark Tolonen的答案,也许那就是你的问题。 - Lasse V. Karlsen

3

你是否在子目录中也运行了 hg init 命令? 如果是,请不要这样做。以下示例说明了此问题:

C:\>hg init project
C:\>cd project
C:\project>hg init sub
C:\project>echo >file1
C:\project>echo >sub\file2
C:\project>hg st
? file1

删除子文件夹中的.hg目录以修复它:
C:\project>rd /s/q sub\.hg
C:\project>hg st
? file1
? sub\file2

与Subversion不同,Mercurial只在项目的根目录下使用一个名为.hg的目录。

谢谢Mark,但不,我没有在任何子目录中执行hg init命令,并且除了在我的根目录中之外,没有其他.hg目录。还有其他想法吗? - GJ.
唯一的想法是发布导致问题的命令的完整示例。您是否有任何.hgignore文件?也许有些东西被意外匹配了。如果在全新的目录中,您执行hg init,创建一个文件,创建一个子目录,在子目录中创建一个文件,然后执行hg status会发生什么?这应该显示两个文件。 - Mark Tolonen

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