2009-07-08 42 views
294

我希望mercurial从存储库的当前状态中删除多个文件。但是,我希望这些文件存在于之前的历史记录中。hg忘记和hg删除有什么区别?

forgetremove如何不同,他们可以做我想要的吗?

+25

不要担心,您无法从Mercurial中的历史记录中删除文件 - 除非您开始使用扩展名,否则历史记录通常是不可变的。 – 2009-07-09 21:18:38

回答

326

'hg forget'只是'hg remove -Af'的简写。从“hg remove”的帮助:

...和-Af可用于去除的下一个版本的文件 不 从工作 目录中删除它们。

底线:“remove”将删除你的工作拷贝磁盘上的文件(除非你使用-Af)和“forget”没有。

+7

在“Mercurial 1.3”中重新引入了“hg forget”,作为执行“hg remove -Af”的更简单的方法。它安排文件的删除而不从工作副本中删除它。 – 2009-07-09 21:14:05

+5

很高兴听到它。 '删除-Af'(以及'删除'帮助页面上的整个选项表)是疯狂的。 – 2009-07-10 02:40:40

26

从文档中,您可以明显使用任一命令将文件保留在项目历史记录中。看起来你想删除,因为它也从工作目录删除文件。

从水银书在http://hgbook.red-bean.com/read/

删除文件不会影响其 历史。 明白,删除文件具有 只有两个效果。它从 工作目录中删除 当前版本的文件。它会阻止Mercurial 从下次提交时跟踪对文件 的更改。 删除文件并不会以任何方式更改文件的历史记录 。

手册页汞柱(1)说,这大约忘记:

马克指定的文件,使他们 不再下一 提交后跟踪。这只会从当前分支中删除 中的文件,而不是从 整个项目历史中删除文件,并且 不会从工作中的 目录中删除它们。

这大约删除:

时间表从仓库中取出 指定的文件。此 只从当前的 分支中删除文件,而不是从整个项目的 历史中删除。

37

把最好的办法是,hg forget相同hg remove除了,它让文件后面工作副本。这些文件留作未跟踪文件,现在可以选择使用.hgignore中的模式忽略。

换句话说,如果我使用hg forgethg remove当我从您那里拉出,我不能告诉。当您更新到该更改集时,您在上运行hg forget的文件将被删除 - 就像您使用hg remove代替了一样。

3

如果使用"hg remove b"反对用“A”状态,这意味着它已经被添加,但不是COMMITED文件,水银会回应:

not removing b: file has been marked for add (use forget to undo) 

这种反应是删除之间的差异非常明确的解释忘了。

我的理解是,"hg forget"用于撤销添加但未提交的文件,以便它不被版本控制跟踪;而"hg remove"则用于从版本控制中提取已提交的文件。

这个thread有一个使用hg remove来对付7种不同类型的状态文件的例子。

1

的文件可以被跟踪或没有,你使用汞添加跟踪文件和 汞去除或HG忘记取消跟踪。使用hg删除没有 标志将同时删除该文件并取消跟踪它,hg忘记将 只需取消它,而不删除它。