hg忘了和hg删除有什么区别?


313

我希望从数据库的当前状态中删除几个文件。但是,我希望文件存在于先前的历史记录中。

怎么做forgetremove有什么不同,他们可以做我想做的吗?


27
不用担心,您无法从Mercurial的先前历史记录中删除文件-历史记录通常是不可变的,除非您开始使用扩展名。
马丁·盖斯勒

Answers:


348

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

...和-Af可用于从下一个版本中删除文件,而无需从工作目录中删除它们。

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


7
Mercurial 1.3中重新引入了“ hg忘记”,这是执行“ hg删除-Af”的一种简便方法。它计划删除文件而不将其从工作副本中删除。
马丁·盖斯勒

5
很高兴听见。“删除-Af”(以及“删除”帮助页面上的整个选项表)是疯狂的。
Ry4an Brase 09年

32
@ Ry4an:说真的,这太荒谬了。我贡献了重新引入“忘记”的补丁。当我进行编写时,我意识到-Af在代码中完全有意义,但从用户的角度来看,这是完全荒谬的。
史蒂夫·洛斯

10
呵呵,这就是Mercury的优点-人们正在积极地,反复地思考从用户的角度来看什么才有意义。感谢您修复该问题。
Ry4an Brase 09年

9
本地构建配置文件之类的?本地工具的路径因系统而异?意外添加了您不想在源代码管理中但想要保存的日志文件?我猜是这样。
Ry4an Brase

42

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

换句话说,我无法分辨您是否使用过hg forgethg remove何时离开。在运行了一个文件hg forget一样,如果你曾经使用-当我更新到该变更被删除hg remove,而不是。


27

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

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

删除文件不会影响其历史记录。重要的是要了解删除文件只有两个作用。它将从工作目录中删除文件的当前版本。从下一次提交起,它将阻止Mercurial跟踪对文件的更改。删除文件不会以任何方式改变文件的历史记录。

手册页hg(1)谈到了这一点:

标记指定的文件,以便在下一次提交后不再对其进行跟踪。这只会从当前分支中删除文件,而不会从整个项目历史记录中删除文件,也不会从工作目录中删除它们。

关于删除:

计划指示的文件以从存储库中删除。这只会从当前分支中删除文件,而不会从整个项目历史记录中删除文件。


3

如果您使用"hg remove b"状态为“ A”的文件,这意味着该文件已添加但尚未提交,则Mercurial将响应:

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

此响应非常清楚地说明了删除和忘记之间的区别。

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

线程有一个示例,用于hg remove处理7种不同状态类型的文件。


2

是否可以跟踪文件,您可以使用hg add来跟踪文件,使用 hg remove或hg忘记取消跟踪。使用不带标志的hg remove既可以删除文件又可以取消跟踪,而hg lucky可以直接取消跟踪而不删除它。


3
我不知道当这个人本人已经报警时,为什么您觉得需要添加此报价,但是,嘿,不管您的船是什么。
内森·塔吉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.