hg forget和hg remove的区别是什么?

我希望mercurial从存储库的当前状态中删除几个文件。但是,我希望这些文件存在于以前的历史记录中。

forgetremove有什么不同,它们能做我想做的事情吗?

111278 次浏览

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

来自Mercurial的书http://hgbook.red-bean.com/read/:

删除文件不影响其 历史。重要的是 理解删除文件 只有两个效果。它去掉了 文件的当前版本 工作目录。停止Mercurial 从跟踪文件的更改, 从下次提交时开始。 删除文件无论如何都不会 修改文件的历史记录

手册页hg(1)说忘记:

标记指定的文件 以后再也不会被跟踪了 提交。这只删除文件 当前的分支,不从 整个项目历史,确实如此 而不是从工作中删除它们 目录。< / p >

这是关于移除的:

计划指定的文件 从存储库中删除。这 仅从当前删除文件 分支,不是整个项目 历史。< / p >

'hg forget'只是'hg remove -Af'的缩写。从'hg remove'帮助:

< p >…和-Af可以用来删除文件 从下次修订没有 从工作中删除它们 目录。< / p >

底线:'remove'从磁盘上的工作副本中删除文件(除非你使用-Af),而'forget'不会。

最好的方法是hg forget相同的hg remove 除了,它将文件留在你的工作副本中。这些文件将作为未跟踪的文件留下来,现在可以使用.hgignore中的模式选择性地忽略它们。

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

如果你对一个“a”状态的文件使用"hg remove b",这意味着它已被添加但未提交,Mercurial将响应:

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

这个回答非常清楚地说明了remove和forget之间的区别。

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

这个线程有一个对7种不同状态的文件使用hg remove的例子。

一个文件可以跟踪或不跟踪,你使用hg添加来跟踪一个文件和 hg删除或hg忘记取消跟踪它。使用hg删除没有 flags将删除文件并取消跟踪,hg忘记