【问题标题】:How to get mercurial to notice files added into subdirectories? (hg st, hg add)如何让 mercurial 注意到添加到子目录中的文件? (hg st, hg 添加)
【发布时间】:2010-12-29 13:15:17
【问题描述】:

如果我在项目的根目录中添加一个新文件,它会在hg st 中显示为? 状态,并添加为hg add

但是,如果我将新文件添加到子目录中,它根本不会出现在 hg st 中,并且只有在我明确添加文件时才会添加(即使我添加了文件的包含目录)。

我怎样才能像 subversion 一样注意到子目录中的文件?

谢谢

【问题讨论】:

  • 这是发生在任何子目录(即独立于其名称)还是仅针对特定子目录?
  • 请发布一个说明问题的具体示例,从hg init 开始,就像我的答案/猜测中的示例一样。
  • hg status --all 是否为您提供文件列表?

标签: mercurial subdirectory


【解决方案1】:

好吧,没有任何额外参数的普通hg add 也会在子目录中添加文件,它基本上会添加所有状态未知的文件以进行跟踪。

但是,如果您指定一个简单的掩码,它只会在您当前的工作目录(即 hg 命令的工作目录,而不是与存储库关联的工作目录)上运行,所以如果您当前位于子目录,它会添加那些文件,如果你在根目录,它会添加那些文件。

换句话说,这个:

hg add test*

仅对您当前所在目录中的文件进行操作。

您可以通过指定告诉 hg 对子目录进行操作的掩码来覆盖该行为:

hg add **/test*

这表示“在当前目录和所有子目录中添加与'test*'匹配的所有文件。

如果删除其中一个星号,则只能对当前工作目录的子目录进行操作。

如果您发布您执行的具体命令、输出(如果有)以及之前和之后的hg st 的输出,将会有所帮助。

【讨论】:

  • 我没有使用任何面具。我只是在子目录中添加一个文件并执行hg st,但看不到任何输出(甚至文件的未知? 状态)。如果我在根目录中做同样的事情,我确实会看到状态未知的文件。值得一提的是,.hgignore 中没有忽略子目录
  • 目录名是什么,文件名是什么,能不能把你的.hgignore文件贴出来,以防万一?
  • 哦,还要在这里查看@Mark Tolonen 的答案,这可能是你的问题。
【解决方案2】:

您在子目录中也有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 目录。

【讨论】:

  • 谢谢马克,但不,我没有hg init 任何子目录,除了我的根目录外没有.hg 目录。还有其他想法吗?
  • 唯一的想法是发布导致问题的命令的完整示例。你有一个 .hgignore 吗?也许有些东西是偶然匹配的。如果在一个全新的目录中,hg init,make 创建文件,创建子目录,在子目录中创建文件,然后hg status,会发生什么?这应该显示两个文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-22
  • 2013-07-26
  • 2019-01-06
  • 2014-02-28
  • 2011-01-21
相关资源
最近更新 更多