【发布时间】:2010-11-09 05:26:00
【问题描述】:
我希望 mercurial 从存储库的当前状态中删除几个文件。但是,我希望这些文件存在于以前的历史记录中。
forget 和 remove 有何不同,它们能做我想做的事吗?
【问题讨论】:
-
别担心,您无法从 Mercurial 的先前历史记录中删除文件——除非您开始使用扩展,否则历史记录通常是不可变的。
我希望 mercurial 从存储库的当前状态中删除几个文件。但是,我希望这些文件存在于以前的历史记录中。
forget 和 remove 有何不同,它们能做我想做的事吗?
【问题讨论】:
从文档中,您显然可以使用任一命令将文件保留在项目历史记录中。看起来您想要删除,因为它还会从工作目录中删除文件。
来自 http://hgbook.red-bean.com/read/ 的 Mercurial 书:
删除文件不会影响其 历史。重要的是要 了解删除文件有 只有两个效果。它删除了 文件的当前版本来自 工作目录。它停止了 Mercurial 从跟踪文件的更改, 从下一次提交开始。 删除文件不会以任何方式 更改文件的历史记录。
手册页 hg(1) 提到了忘记:
标记指定的文件,以便它们 下一次后不再被跟踪 犯罪。这只会从 当前分支,而不是来自 整个项目历史,它确实 不要从工作中删除它们 目录。
关于删除:
安排指定的文件 从存储库中删除。这 只删除当前文件 分支,而不是整个项目 历史。
【讨论】:
'hg forget' 只是 'hg remove -Af' 的简写。来自“hg remove”帮助:
...和 -Af 可用于删除文件 从下一个版本没有 从工作中删除它们 目录。
底线:“remove”会从磁盘上的工作副本中删除文件(除非您使用 -Af)而“forget”不会。
【讨论】:
最好的说法是hg forget 与hg remove 相同 除了 它将文件留在你的 工作复制。这些文件作为未跟踪文件留下,现在可以选择使用.hgignore 中的模式忽略。
换句话说,我不知道当我从你那里拉出来时,你使用的是 hg forget 还是 hg remove。当我更新到该变更集时,您在 上运行 hg forget 的文件将被删除,就像您使用 hg remove 一样。
【讨论】:
如果您对状态为“A”的文件使用"hg remove b",这意味着它已添加但未提交,Mercurial 将响应:
not removing b: file has been marked for add (use forget to undo)
这个响应非常清楚地解释了删除和忘记之间的区别。
我的理解是"hg forget"是用来撤销一个添加但未提交的文件,这样它就不会被版本控制跟踪;而"hg remove" 用于从版本控制中取出已提交的文件。
这个thread 有一个使用hg remove 处理7 种不同状态类型文件的示例。
【讨论】:
一个文件是否可以被跟踪,你使用 hg add 来跟踪一个文件并且 hg remove 或 hg 忘记取消跟踪。不使用 hg remove flags 将删除文件并取消跟踪它,hg forget 将 只需取消跟踪而不删除它。
【讨论】: