如何在Mercurial(hg)中列出存储库中的所有文件?


74

Mercurial中是否有一条命令会列出当前受源代码控制的所有文件?

我可以dir /s列出所有文件夹和子文件夹中的文件,但是我不知道已将其添加到存储库中。我有各种排除的文件类型和文件夹,我想在.hgignore文件中进行设置之前确认没有添加任何文件和文件夹。


您应该看一下这个帖子:mercurial.808500.n3.nabble.com/…–
Pedro

Answers:


70

hg status --all 将列出树中的所有文件,并用字母表示其状态:M表示修改,C表示清理(归hg拥有),I表示忽略。

对于只是被忽略的文件,请使用hg status -i。对于仅在下次提交时添加的文件,请使用hg status -a。这些仅显示您需要了解的内容,不需要扫描较长的文件列表。


2
因为其他人可能会看看这里的信息,我想我会提到我的新hglist扩展,为水银的“LS”命令:alastairs-place.net/projects/hglist
阿拉斯泰尔

2
hg st -A是上述命令的缩写形式。
Serge Stroobandt

10
好的答案,但不能直接回答问题。处于干净的工作状态时,hg status -c仅列出所有跟踪的文件。进行其他更改,hg status -carmd将达到目的。添加-n以排除状态标志。
不确定

这个答案不正确,因为hg st --all也会列出所有未跟踪的文件(带有前面的?)
bph 2016年

64

您也可以签出hg locate命令。-I当我想将文件限制到某个目录时,我会使用它以及该选项。

列出存储库中的所有文件:

hg locate

从存储库(“根”)目录中:

hg locate -I dir/sub_dir/dir_of_interest

传递的路径-I需要根据运行命令的目录进行更改。如果从上例中的dir目录运行命令,则需要修改参数以找到:

hg locate -I sub_dir/dir_of_interest

输出文件列表将保持不变,显示存储库中每个文件的完整路径。

尝试hg help -v locate获取更多信息。


2
正是我需要的,谢谢。对于只需要列出跟踪文件的人来说,这是一个更好的答案。
Gringo Suave

2
hg loc是上述命令的缩写形式。
Serge Stroobandt

4
这是真正的答案。内德的答案是没有入门的。
尼尔·特拉夫特

2
如果您真的想这样使用hg locate,可以使用以下命令自动获取当前目录hg locate -I `pwd`
约翰

@NeilTraft我不能分享您对这样使用的热情hg locatehg status -i列出被忽略的文件。hg status -a将仅列出那些将由提交添加的内容。随着hg locate有用户错误的调和你,你所期望的列表,请参阅列表中的相当大的风险。hg locate在任何/所有修订版本中搜索特定文件名的地方都非常有用。同样,hg grep还将搜索所有/所有修订版本中的所有文件内容。
约翰

23

hg manifest将仅列出存储库中的文件,而hg status --all将列出存储库结构中的所有文件,并包含正在跟踪和未跟踪的标记。


2
尽管有一个轻微的缺点,即它不能像OP所希望的那样通过文件夹来缩小,但这给了我我想要的东西。它仍然比公认的答案更好。
尼尔·特拉夫特

3

仅列出忽略或添加的文件

列出被忽略的文件,请执行:hg status -i

对于刚刚添加的文件,请执行hg status -a

如果您不想输入太多内容,可以将其缩短为hg sta -ihg sta -a

的这两种用法status比更为简单,locate并且将为您提供您所关注的特定文件状态,因此错误发生的可能性大大降低。

更多关于 hg status

要列出商品回购中的所有文件,请执行以下操作:hg status --all

列出文件时,将在文件之前添加前缀:

  M = modified
  A = added
  R = removed
  C = clean
  ! = missing (deleted by non-hg command, but still tracked)
  ? = not tracked
  I = ignored

如果列出文件夹中的文件,则可以提供路径:

  • hg st --all MyFolder – MyFolder中的所有文件
  • hg sta -i MyFolder –只是忽略了MyFolder中的文件。

除了-i“已忽略”和-a“已添加”外,其他标志也可用于仅列出具有特定状态的文件。

得到 help

在此处阅读另一个非常有用的答案,以获取对该status命令的全面说明。它之所以遭到否决,是因为作者试图通过Mercurial询问如下status命令来表明您可以发现上述所有内容:

hg help status

您可以要求Mercurial告诉您任何这样的命令。如果要获取Mercurial的命令列表,请键入hg help


-3
C:\>汞帮助-v状态
汞状态[OPTION] ... [FILE] ...

别名:st

在工作目录中显示更改的文件

    显示存储库中文件的状态。如果给出名称,则仅文件
    显示该匹配项。干净或忽略的文件或文件的来源
    复制/移动操作,除非-c /-clean,-i /-忽略,
    -C /-副本或-A /-全部给出。除非用“显示”描述的选项
    仅给出...”,使用选项-mardu。

    选项-q /-quiet隐藏未跟踪(未知和忽略)的文件,除非
    使用-u /-unknown或-i /-ignore显式请求。

    注意:如果权限已更改,状态可能似乎与diff不同
    或发生合并。标准差异格式不报告
    权限更改和差异仅报告相对于一次合并的更改
    父母

    如果给出一个修订,则将其用作基本修订。如果两个
    给出了修订,并显示了它们之间的差异。改变
    选项还可以用作列出已更改文件的快捷方式
    从其第一父级修订。

    用于显示文件状态的代码为:

      M =修改
      A =已添加
      R =已移除
      C =干净
      !=丢失(由非hg命令删除,但仍被跟踪)
      ?=未追踪
      我=被忽略
        =列为A的前一个文件的来源(已添加)

选项:

 -A --all显示所有文件的状态
 -m --modified只显示已修改的文件
 -a --add仅显示已添加的文件
 -r --removed仅显示已删除的文件
 -d --deleted仅显示已删除(但已跟踪)的文件
 -c --clean仅显示未更改的文件
 -u --unknown仅显示未知(未跟踪)文件
 -i --ignored仅显示忽略的文件
 -n --no-status隐藏状态前缀
 -C-副本显示复制文件的源
 -0 --print0带有NUL的结尾文件名,用于xargs
    --rev显示与修订版本的差异
    --change列出修订的已更改文件
 -I-包括与给定模式匹配的名称
 -X-排除与给定模式匹配的名称

全局选项:
 -R --repository存储库根目录或覆盖捆绑文件的名称
    --cwd更改工作目录
 -y --noninteractive不提示,对于任何需要的答案均假设为“是”
 -q-安静抑制输出
 -v --verbose启用附加输出
    --config设置/覆盖配置选项(使用'section.name = value')
    --debug启用调试输出
    --debugger启动调试器
    --encoding设置字符集编码(默认值:cp1252)
    --encodingmode设置字符集编码模式(默认值:严格)
    --traceback总是在出现异常时显示回溯
    --time时间命令花费的时间
    --profile打印命令执行配置文件
    --version输出版本信息并退出
 -h --help显示帮助并退出

5
有趣的是我的答案如何年复一年地不断下降。但是告诉人们阅读该手册真的很糟糕吗?stackoverflow是否使文档无效?让人们停止使用--help/ /?/man和其他文件,因为它是更快地问计算器上比读什么书?我拒绝删除我的回答:)
simendsjo 2014年

嗨,您可以投票给我,因为这是这里最有用的答案。我不会根据从中发现的内容再写一本,看看是否有任何支持:-)
Benjohn 2014年

1
对于它的价值,您的答案很棒。但是用户需要知道status,因为其中一个hg命令实际上首先会执行此操作。我每天都使用Mercurial,但我不知道它可能会被要求显示被忽略的文件。
约翰2014年

2
@simendsjo:StackOverflow与重新文档无关。您的“答案”是一堵墙,重要的部分(--all)甚至不在屏幕上(您必须滚动才能看到它)。而且您实际上在任何地方都没有提供实际的语言来实现目标。总体而言,不是很有帮助。为了进行比较,Benjohn首先给出所需的命令,然后提供解释。
伊桑·弗曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.