Mercurial可以使用.hgignore来忘记文件吗?

Mercurial可以使用.hgignore来忘记文件吗?,mercurial,Mercurial,我忘记将正确的.hgignore放入我的项目中,现在我的存储库中有许多无用的文件。由于这些文件已在源代码管理下。hgignore将不会拾取它们 hg是否有办法忘记与.hgignore匹配的所有文件?您需要删除该文件才能将其忽略 hg remove -Af myfile (将副本保留在工作区中时从修订中删除:或) 但是您的Mercurial存储库不会“忘记”以前版本中的那些文件 删除文件不会影响其历史记录。 重要的是要了解删除文件只有两种效果 它从工作目录中删除文件的当前版本 它阻止Mercu

我忘记将正确的.hgignore放入我的项目中,现在我的存储库中有许多无用的文件。由于这些文件已在源代码管理下。hgignore将不会拾取它们


hg是否有办法忘记与.hgignore匹配的所有文件?

您需要删除该文件才能将其忽略

hg remove -Af myfile
(将副本保留在工作区中时从修订中删除:或)

但是您的Mercurial存储库不会“忘记”以前版本中的那些文件

删除文件不会影响其历史记录。
重要的是要了解删除文件只有两种效果

  • 它从工作目录中删除文件的当前版本
  • 它阻止Mercurial从下一次提交时开始跟踪对文件的更改
删除文件不会以任何方式改变文件的历史记录


另一种方法是,当您现在需要忽略大量额外文件时:

  • 删除它们(从文件系统中,不是使用hg命令,而是使用OS'rm'命令)
  • hg addremove
    (警告,它将添加当前未提交的文件,但它将
    hg删除您刚刚注册的所有其他文件)

有关更多信息,请参阅。

我认为hg无法做到开箱即用

但你很容易自己动手。hgignore条目是regexp或glob,因此您只需浏览条目,找到匹配的文件/dir并对其执行“hg remove”

对于hgignore解析/匹配,如果使用python,只需调用hg的ignore.py中的函数即可


也许有人可以为此编写扩展。

这是我为.hgignore中提到的每个目录所做的

for/f“delims=“%i in('dir-bin/ad/s/b')不要忘记%i/

和文件

for/f“delims=“%i in('dir*.user/s/b')不要忘记%i

免责声明:
我不知道它是否能在非windows操作系统上工作。

卓越(需要1.9):


Idan K的解决方案很好。我在全局mercurial.ini中添加了一个别名,因为我记不起该命令

[alias]
forgetignored = forget "set:hgignore() and not ignored()"

是的,我知道我可以手动执行,但我想在我的文件上再次应用.hgingore模式,以忘记所有匹配的文件。我想扔掉几百个CVS文件夹和类。@OlivierS:我明白了。我已经更新了我的答案,以便更好地解决您的问题。我得出了相同的结论,并尝试了一下,但仅持续了20分钟左右。还没有成功,但我在dirstate类中找到了重要的调用。HGAPI缺乏文档。他们故意这样做,似乎是因为它变化太快了:“Mercurial API主要用于内部使用和创建扩展,并且随时可能发生更改”(来自)。一旦你习惯了hg代码,它就相当干净了。
对于/f“delims=“%i in('dir-bin/ad/s/b'),请不要忘记%i/
。看我的答案的确,这正是我想要的。以前从未听说过文件集,谢谢你的提示。哇,这很简单(与git相比)。谢谢你,伊丹!这一定是Mercuralit不可能记住这个命令的一部分,我想我已经在Google上搜索了一百次了。
[alias]
forgetignored = forget "set:hgignore() and not ignored()"