hg forget和hg remove有什么区别?

时间:2009-07-08 23:51:31

标签: version-control mercurial

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

forgetremove如何区别,他们能做我想做的事吗?

5 个答案:

答案 0 :(得分:341)

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

  

...和-Af可用于删除文件   从没有的下一个修订版   从工作中删除它们   。目录

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

答案 1 :(得分:41)

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

换句话说,当我离开你时,我无法告诉你是否使用了hg forgethg remove。当我更新到该变更集时,将删除您在上运行hg forget的文件 - 就像您使用hg remove一样。

答案 2 :(得分:26)

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

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

  

删除文件不会影响它   历史。重要的是要   了解删除文件有   只有两个效果。它删除了   来自的当前版本的文件   工作目录。它会停止Mercurial   从跟踪更改到文件,   从下次提交时起。   删除文件不以任何方式   改变文件的历史。

手册页hg(1)说这是关于忘记:

  

标记指定的文件以便它们   在下一个之后不再被跟踪   承诺。这只会从中删除文件   目前的分支,而不是来自   整个项目历史,它确实如此   不要从工作中删除它们   。目录

关于删除:

  

安排指定的文件   从存储库中删除。这个   仅从当前删除文件   分支,而不是整个项目   历史。

答案 3 :(得分:3)

如果您对具有“A”状态的文件使用"hg remove b",这意味着它已被添加但未提交,Mercurial将回复:

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

这个回答非常明确地说明了删除和遗忘之间的区别。

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

thread有一个示例,可以针对7种不同类型的状态使用hg remove

答案 4 :(得分:2)

  

可以跟踪或不跟踪文件,使用 hg add 来跟踪文件和    hg remove 或hg忘记取消跟踪。不使用 hg删除   flags会删除文件并取消跟踪, hg忘记会   只需取消跟踪而不删除它。