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

时间:2013-06-21 13:12:07

标签: version-control mercurial dvcs hgignore

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

一个分支(开发)应该忽略这个目录,而另一个分支(发布)应该忽略它。我知道尽管输入了.hgignore文件,我仍然可以使用hg add dir/somefile。但是现在我想以递归的方式添加整个元素。

我搜索了那个并尝试了

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。

3 个答案:

答案 0 :(得分:6)

与此同时,我能够提出 - 似乎是一个解决方案:

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/`

希望这有助于某人。

答案 1 :(得分:1)

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

find docs -exec hg add {} \;

每当运行命令时发现它总是先做好干运行,所以我通常先在命令前加echo

find docs -exec echo hg add {} \;

如果您需要添加足够的文件以确保性能,则可以使用+而不是\;,这会将所有匹配的文件名附加到同一命令,而不是为每个命令运行一次文件名。对于hg add,这可能不是一个问题,但对于了解find的工作方式非常重要。

find docs -exec hg add {} +

答案 2 :(得分:0)

不幸的是,.hgignore将忽略任何不是文件完整路径的内容,即使在评估模式时也会受到尊重。 a post on StackExchange包含您可以使用的替代方案(假设您不想更改.hgignore