Mercurial hg状态显示被忽略的文件

Ala*_*yne 7 mercurial hgignore

谁能告诉我为什么mercurial显示'hg status'命令的被忽略文件?

这是mercurial确实忽略文件的确认:

$ hg addremove
$ hg commit 
nothing changed     
Run Code Online (Sandbox Code Playgroud)

现在,看一下状态输出.我在上面的行之后立即运行了这个.(打印输出是部分的,删除了可识别的文本)

$ hg status
? Core/target/Core-0.0.1-SNAPSHOT-tests.jar
? Core/target/Core-0.0.1-SNAPSHOT.jar
? Core/target/classes/META-INF/MANIFEST.MF
? Core/target/classes/xxx/yyy/zzz/X.class
? Core/target/classes/xxx/yyy/zzz/XBackup.class
? Core/target/classes/xxx/yyy/zzz/XBackupInput.class
? Core/target/classes/xxx/yyy/zzz/XBackupOutput.class
? Core/target/classes/xxx/yyy/zzz/XImpl$GetResultsAndStatistics.class
? Core/target/classes/xxx/yyy/zzz/XImpl$MonitoringMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl$UpdateMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl.class
? Core/target/classes/xxx/yyy/zzz/XIsFullException.class
? Core/target/classes/xxx/yyy/zzz/XSource.class
? Core/target/classes/xxx/yyy/zzz/XUsageException.class
? Core/target/classes/xxx/yyy/zzz/CheckResults.class
? Core/target/classes/xxx/yyy/zzz/Noise.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator$TemporalMeasure.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator.class
? Core/target/classes/xxx/yyy/zzz/core/LoggingConfigurator.class
? Core/target/classes/xxx/yyy/zzz/core/ManagedIterator.class
? Core/target/classes/xxx/yyy/zzz/core/NetworkUtils.class
? Core/target/classes/xxx/yyy/zzz/core/StackTraceUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Summarisable.class
? Core/target/classes/xxx/yyy/zzz/core/TimingUtils.class
? Core/target/classes/xxx/yyy/zzz/core/XMLStaticStringUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Zipper.class
...
Run Code Online (Sandbox Code Playgroud)

在状态打印输出中显示了一千行这些被忽略的文件; 这是一个严重的guff.

我怎么能摆脱这个?

谢谢

更新:

这是我的.hgignore文件.

syntax:glob
.metadata*

syntax:regexp
^target.*$
^[^/]*/target.*$
^[^/]*/[^/]*/target.*$
^bin.*$
^[^/]*/bin.*$
^[^/]*/[^/]*/bin.*$
Run Code Online (Sandbox Code Playgroud)

更新:

修改了正则表达式* - >.*

Ry4*_*ase 5

您的正则表达式语法错误.你有这个:

syntax:regexp
^target*$
Run Code Online (Sandbox Code Playgroud)

这意味着"忽略以目标开头并以星号结尾的任何内容

哪个不能忽略这些:

Core/target/classes/META-INF/MANIFEST.MF
Core/target/classes/xxx/yyy/zzz/X.class
Run Code Online (Sandbox Code Playgroud)

有两个原因 - 他们从Core/没有开始,target他们不以星号结束.

你可能意味着什么:

syntax:regexp
^.*/target/.*$
Run Code Online (Sandbox Code Playgroud)

它匹配其中的任何/target/内容(注意它.*在正则表达式中*是用于glob样式).然而,^并且$只用于根你的正则表达式并且你不希望它扎根 - 你想在字符串中的任何地方找到它,所以只需这样做:

syntax:regexp
/target/
Run Code Online (Sandbox Code Playgroud)

所有这一切的线索是文件被标记为?哪个意味着没有被忽略而没有被添加,如果它们被忽略,你根本不会看到它们而不添加--ignored到status命令.


Ala*_*yne 1

非常感谢大家对此的帮助。我还没有找到问题的答案,但我确实找到了解决问题的方法。所以我假设在修改 hgignore regexps Mercurial 时的某个时候,它会感到困惑并损坏它的内部数据......或者其他什么。我不太了解内部情况,无法知道这可能是什么。

无论如何,如果你发现自己处于同一条船上,这就是我所做的:

  1. 确保您的 .hgignore 文件说明了您想要的内容,并且 hg 状态中出现的所有文件都是您想要忽略的文件。
  2. 添加所有要忽略的文件。hg addremove 不起作用,因为它确实尊重 hgignore 内容,所以我使用 Eclipse 的 hg 插件并手动执行每个文件(好吧,我选择了所有文件,Eclipse 单独将添加应用到它们)。
  3. 恢复所有添加的文件。我使用了以下内容,因为我在 Linux 上。(感谢另一张关于 SO 的单独问题的海报 - 不幸的是我现在找不到了)

    汞状态-an0 | xargs -0 hg 恢复

  4. 重复上述步骤,直至不再起作用。就我而言,有时连续恢复多达 3 次!(不知道它实际上在做什么:()

  5. 犯罪

您现在应该不再在 hg status 输出中看到被忽略的文件。

抱歉,我不知道为什么会这样,或者最初的问题是什么。如果有人这样做,我很想知道你的想法。

再次非常感谢大家:)