【发布时间】:2011-03-19 23:07:49
【问题描述】:
我忘记将正确的 .hgignore 放入我的项目中,现在我的存储库中有许多无用的文件。由于这些文件已经在源代码控制之下。hgignore 不会选择它们。
有没有办法让 hg 忘记所有与 .hgignore 匹配的文件?
【问题讨论】:
标签: mercurial
我忘记将正确的 .hgignore 放入我的项目中,现在我的存储库中有许多无用的文件。由于这些文件已经在源代码控制之下。hgignore 不会选择它们。
有没有办法让 hg 忘记所有与 .hgignore 匹配的文件?
【问题讨论】:
标签: mercurial
filesets awesomeness(需要 1.9):
hg forget "set:hgignore() and not ignored()"
【讨论】:
您需要删除该文件以使其被忽略。
hg remove -Af myfile
(从修订中删除,同时在您的工作区上保留副本:或hg forget)
但您的 Mercurial 存储库不会“忘记”以前版本中的那些相同文件。
删除文件不会影响其历史记录。
重要的是要了解删除文件只有两个效果。
- 它从工作目录中删除文件的当前版本。
- 它会阻止 Mercurial 从下一次提交时开始跟踪对文件的更改。
删除文件不会以任何方式改变文件的历史记录。
另一种方式,当您现在需要忽略大量额外文件时:
hg addremove(警告,它会添加当前未提交的文件,但它会hg remove您刚刚 rm'ed 的所有其他文件)【讨论】:
我认为 hg 不能开箱即用。
但是,您可以轻松推出自己的产品。 hgignore 条目是 regexp 或 glob,因此您可以浏览这些条目并找到匹配的文件/目录并对其执行“hg remove”。
对于hgignore解析/匹配,如果你使用python你可以调用hg的ignore.py中的函数。
也许有人可以为此写一个扩展。
【讨论】:
for /f "delims=" %i in ('dir bin /ad/s/b') do hg forget %i/。看我的回答
这是我对 .hgignore 中提到的每个目录所做的
for /f "delims=" %i in ('dir bin /ad/s/b') do hg forget %i/
对于文件
for /f "delims=" %i in ('dir *.user /s/b') do hg forget %i
免责声明:
我不知道它是否可以在非 Windows 操作系统上运行。
【讨论】:
Idan K 的解决方案很棒。我为我的全局 mercurial.ini 添加了一个别名,因为我不记得该命令。
[alias]
forgetignored = forget "set:hgignore() and not ignored()"
【讨论】: