Hg添加整个目录,尽管它列在.hgignore中



我的mercurial存储库中有两个分支,它们具有相同的.hgignore文件:dir/

一个分支(开发)应该忽略这个目录,而另一个分支(发布)应该而不是忽略它。我知道我可以使用hg add dir/somefile,尽管.hgignore文件中有条目。但现在我想递归地添加整个目录。

我搜索并尝试

hg add dir    # does not add anything
hg add dir*   # does not add anything
hg add dir/   # does not add anything
hg add dir/*  # only adds the files in dir but not in sub-directories
hg add dir/** # only adds the files in dir but not in sub-directories

但这不能递归地工作。我可以用add dir/* dir/*/* dir/*/*/*等等,但那很烦人。有没有别的通配符或者别的方法来完成这个?

PS:我想避免更改。hgignore.

与此同时,我想出了一个似乎是一个解决方案:

hg add --dry-run --verbose `hg status --ignored --no-status --exclude **.DS_Store dir/`

这显示了它要添加的文件列表。如果你真的想添加它们,使用下面的命令:

hg add `hg status --ignored --no-status --exclude **.DS_Store dir/`

如果您可以访问find,则可以执行以下操作:

find docs -exec hg add {} ;

无论何时使用find运行命令,最好先做一次演练,所以我通常先在命令前面加上一个echo:

find docs -exec echo hg add {} ;

如果您需要添加足够的文件,而性能是一个问题,您可以使用+而不是;,它将把所有匹配的文件名附加到同一个命令中,而不是为每个文件名运行一次命令。对于hg add来说,这可能不是一个问题,但对于理解find是如何工作的很重要。

find docs -exec hg add {} +

不幸的是,.hgignore将忽略任何不是文件完整路径的内容,即使在评估模式时也会考虑。在StackExchange上有一篇文章,其中包含您可以使用的替代方案(假设您不想更改.hgignore)

相关内容

  • 没有找到相关文章

最新更新