防止“hg status”显示未跟踪目录下的所有内容

时间:2010-03-26 04:49:18

标签: mercurial

我发现hg status的输出对于未跟踪的目录来说过于冗长。假设我有一个由githg管理的空存储库。因此会有两个目录.git.hg

git status的输出是:

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .hg/

hg status的输出是:

? .git/HEAD
? .git/config
? .git/description
? .git/hooks/applypatch-msg.sample
? .git/hooks/commit-msg.sample
? .git/hooks/post-commit.sample
? .git/hooks/post-receive.sample
? .git/hooks/post-update.sample
? .git/hooks/pre-applypatch.sample
? .git/hooks/pre-commit.sample
? .git/hooks/pre-rebase.sample
? .git/hooks/prepare-commit-msg.sample
? .git/hooks/update.sample
? .git/info/exclude

有没有办法将其输出减少到类似下面的行?

? .git/

3 个答案:

答案 0 :(得分:22)

这对我有用:

hg status -q
  

选项-q / --quiet隐藏未跟踪(未知和已忽略)的文件,除非-u / --unknown-i / --ignored明确请求

答案 1 :(得分:11)

您只需添加.hgignore文件

即可
 syntax:glob
.git
.gitattributes
.gitignore

完全忽略.git和其他与git相关的文件。

如果目标只是限制目录,如果在该目录中添加隐藏文件(this answer之后),您仍然可以使用.hgignore

 syntax:regexp
 ^.git/(?!\.hidden).+$

由于Mercurial根本不跟踪目录,因此将忽略.git中除隐藏目录之外的所有文件,实际上只显示状态中的一行。

除非-q/--quiethg status明确请求,否则您还可以选择-u/--unknown-i/--ignored}选项,隐藏未跟踪(未知和已忽略)的文件。
但这意味着.git在这种情况下甚至不会出现。


但是如果目标是将hg状态的一般仅限于目录而不是未跟踪文件的内容,那么我认为这是不可能的:

  • git跟踪文件内容,由于没有添加内容,因此只提到顶级目录“没有添加内容”
  • mercurial跟踪文件(不是目录),因此是全面的列表(文件)。

答案 2 :(得分:1)

我理解的问题是关于如何减少输出:我有类似的需求,但不想跟踪或忽略文件。如果您使用的是* NIX,那么您使用grep,并且您只想在问题陈述时减少输出,例如要删除这些行:

hg status | grep -v "^\?\s\.git" 

或者例如没有显示已删除的文件

hg status | grep -v "^R"

在Windows PowerShell中,等效项为:

hg status | Select-String -Pattern ("^[^R]")