【问题标题】:Mercurial doesn't ignore files in directory I specifyMercurial 不会忽略我指定的目录中的文件
【发布时间】:2012-01-12 12:31:00
【问题描述】:

我有 mercurial 存储库。有.hgignore 文件:

λ ~/workspace/kompgrafika/nurbs/ cat .hgignore 
syntax: regexp
^Makefile
^bin/.*$
CMakeFiles/.*$
^CMakeCache\.txt
^cmake_install\.cmake

我想忽略一个名为 CMakeFiles 的目录:

λ ~/workspace/kompgrafika/nurbs/ tree CMakeFiles 
CMakeFiles
├── 3dfractals.dir
│   ├── build.make
│   ├── cmake_clean.cmake
│   ├── CXX.includecache
│   ├── DependInfo.cmake
│   ├── depend.internal
│   ├── depend.make
│   ├── flags.make
│   ├── link.txt
│       ├── progress.make
│   └── src
│       ├── DisplayControl.cpp.o
│       ├── Drawer.cpp.o
│       ├── main.cpp.o
│       ├── PointFileReader.cpp.o
│       ├── PointGenerator.cpp.o
│       └── Program.cpp.o
├── CMakeCCompiler.cmake
├── cmake.check_cache
├── CMakeCXXCompiler.cmake
├── CMakeDetermineCompilerABI_C.bin
├── CMakeDetermineCompilerABI_CXX.bin
├── CMakeDirectoryInformation.cmake
├── CMakeOutput.log
├── CMakeSystem.cmake
├── CMakeTmp
│   └── CMakeFiles
│       └── cmTryCompileExec.dir
├── CompilerIdC
│   ├── a.out
│   └── CMakeCCompilerId.c
├── CompilerIdCXX
│   ├── a.out
│   └── CMakeCXXCompilerId.cpp
├── Makefile2
├── Makefile.cmake
├── progress.marks
└── TargetDirectories.txt

7 个目录,31 个文件

但运行 hg status 它不会因为某种原因忽略 3dfractals.dir。

λ ~/workspace/kompgrafika/nurbs/ hg st
A .hgignore
A docs/pol_10.wings
? CMakeFiles/3dfractals.dir/src/DisplayControl.cpp.o
? CMakeFiles/3dfractals.dir/src/Drawer.cpp.o
? CMakeFiles/3dfractals.dir/src/PointFileReader.cpp.o
? CMakeFiles/3dfractals.dir/src/PointGenerator.cpp.o
? CMakeFiles/3dfractals.dir/src/Program.cpp.o
? CMakeFiles/3dfractals.dir/src/main.cpp.o

我正在使用:

λ ~/workspace/kompgrafika/nurbs/ hg --version
Mercurial Distributed SCM (version 2.0.2+5-1f9f9b4c2923)
(see http://mercurial.selenic.com for more information)

Copyright (C) 2005-2011 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

我还尝试将CMakeFiles/.*$ 更改为^CMakeFiles$。没有结果。

有什么想法吗?

【问题讨论】:

    标签: mercurial ignore hgignore


    【解决方案1】:

    嗯,它在这里工作:

    $ cat .hgignore
    syntax:regexp
    ^Makefile
    ^bin/.*$
    CMakeFiles/.*$
    ^CMakeCache\.txt
    ^cmake_install\.cmake
    $ hg init
    $ mkdir -p $(dirname CMakeFiles/3dfractals.dir/src/DisplayControl.cpp.o)
    $ touch CMakeFiles/3dfractals.dir/src/DisplayControl.cpp.o
    $ touch CMakeFiles/cmake.check_cache
    $ hg status
    ? .hgignore
    $ hg status -A
    ? .hgignore
    I CMakeFiles/3dfractals.dir/src/DisplayControl.cpp.o
    I CMakeFiles/cmake.check_cache
    

    这是 Mercurial 2.0.2+59,所以它应该和你的版本一样工作。

    hg status 在您所看到的方式中可能会绊倒inotify extension。正如其 wiki 页面上所提到的,它仍然被认为是实验性的,因为它是 still buggy。检查 inotify 与

    $ hg showconfig extensions.inotify
    

    并在必要时禁用它。如果扩展是从您自己的配置文件中加载的(检查hg showconfig --debug),那么您可以删除加载它的行。如果它加载在系统范围的配置文件中,您无法更改,则添加

    [extensions]
    inotify = !
    

    到你自己的配置文件来禁用它。

    【讨论】:

    • 我做了rm -rf CMakeFiles 并制作(再次创建该目录)。然后运行hg status,该目录从列表中消失了。某种缓存错误?
    • 不,不应该——我们不缓存有关.hgignore 文件的信息。 hg showconfig extensions 是否偶然提到了inotify?那是一个文件系统监视器扩展,它可能会弄乱你刚才看到的情况。
    • 是的。似乎删除该扩展程序可以解决问题。
    • 我们去!我用有关 inotify 扩展的更多信息扩展了答案。
    【解决方案2】:

    我在 Windows 上,但通常是

    CMakeFiles/*

    对我有用...

    【讨论】:

      猜你喜欢
      • 2012-02-10
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 1970-01-01
      相关资源
      最近更新 更多