hg忘记和hg remove有什么区别?
我希望mercurial从存储库的当前状态中删除几个文件。 不过,我希望这些文件在之前的历史中存在。
如何forget
和remove
不同,他们可以做我想要的?
' hg forget
'只是' hg remove -Af
'的简写。 从' hg remove
'帮助:
…和-Af可用于从下一个修订版本中删除文件,而不从工作目录中删除它们。
底线:“ remove
”从磁盘上的工作副本删除文件(除非你使用-Af
)和“ forget
”不。
最好的方法是hg forget
与 hg remove
相同 , 只不过它将文件留在工作副本中。 这些文件被留下作为未跟踪的文件,现在可以select使用.hgignore
的模式忽略。
换句话说,当我从你身上拉下来的时候,我不知道你是用hg forget
还是hg remove
。 当我更新到变更集时,您运行hg forget
文件将被删除 – 就像您使用hg remove
。
从文档中,您可以明显地使用任一命令将文件保存在项目历史logging中。 看起来像要删除,因为它也从工作目录删除文件。
从http://hgbook.red-bean.com/read/上的Mercurial书:;
删除文件不会影响其历史logging。 理解删除文件只有两个效果是很重要的。 它从工作目录中删除当前版本的文件。 它会阻止Mercurial跟踪下次提交时的文件更改。 删除文件不会以任何方式改变文件的历史logging。
手册页hg(1)这样说忘记了:
标记指定的文件,以便在下一次提交后不再跟踪它们。 这只会从当前分支中删除文件,而不是从整个项目历史logging中删除,并且不会从工作目录中删除它们。
而这个关于删除:
安排指定的文件从存储库中删除。 这只会从当前分支中删除文件,而不是从整个项目历史中删除。
如果您对“A”状态的文件使用"hg remove b"
,表示已经添加但未提交,则Mercurial将响应:
not removing b: file has been marked for add (use forget to undo)
这个回应是一个非常清楚的解释和忘记之间的区别。
我的理解是, "hg forget"
是为了撤消一个添加但没有提交的文件,以便它不被版本控制跟踪; 而"hg remove"
则是从版本控制中取出一个提交的文件。
这个线程有一个使用hg remove
来处理7种不同types的文件的例子。
一个文件可以被跟踪与否,你使用hg add来跟踪文件,而hg remove或者hg忘记取消跟踪它。 使用没有标志的hg remove会同时删除文件并取消跟踪, hg忘记将不删除它而直接取消。