我希望mercurial从存储库的当前状态中删除多个文件。但是,我希望文件存在于以前的历史记录中。
forget
和remove
如何区别,他们能做我想做的事吗?
答案 0 :(得分:341)
'hg forget
'只是'hg remove -Af
'的简写。来自“hg remove
”帮助:
...和-Af可用于删除文件 从没有的下一个修订版 从工作中删除它们 。目录
底线:“remove
”会从磁盘上的工作副本中删除该文件(除非您使用-Af
),而“forget
”则不会。
答案 1 :(得分:41)
最好的方式是hg forget
相同到hg remove
除了它将文件留在你的< / strong>工作副本。这些文件作为未跟踪的文件留下,现在可以选择使用.hgignore
中的模式进行忽略。
换句话说,当我离开你时,我无法告诉你是否使用了hg forget
或hg 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忘记会 只需取消跟踪而不删除它。