我希望使用mercurial从当前仓库中删除几个文件。但是,我想让这些文件存在于以前的历史记录中。
forget
和remove
有何不同,它们能否实现我的要求?
我希望使用mercurial从当前仓库中删除几个文件。但是,我想让这些文件存在于以前的历史记录中。
forget
和remove
有何不同,它们能否实现我的要求?
hg forget
' 是 'hg remove -Af
' 的简写。从 'hg remove
' 命令的帮助中可以看到:“...并且可以使用 '-Af' 选项在不删除工作目录中的文件的情况下,将它们从下一个修订中删除。”因此,“remove
” 命令会从磁盘的工作副本中删除文件(除非你使用了 -Af
),而“forget
” 则不会删除文件。用最好的方式来表述,hg forget
与hg remove
是完全相同的,只有一个不同之处,那就是它会在您的工作副本中保留文件。这些文件会作为未跟踪的文件留下来,并且现在可以使用.hgignore
中的模式选择性地忽略。
换句话说,当我从您那里拉取时,我无法分辨您是否使用了hg forget
或hg remove
。您在上述变更集上运行hg forget
的文件将会被删除 - 就像您使用hg remove
一样。
从文档来看,似乎可以使用其中任一命令将文件保留在项目历史中。看起来你想使用remove,因为它还会从工作目录中删除该文件。
从Mercurial书中的http://hgbook.red-bean.com/read/:
删除文件不会影响其历史记录。重要的是要理解,删除文件只有两个效果。它会从工作目录中删除文件的当前版本。它会停止Mercurial跟踪文件的更改,从下一次提交开始。删除文件不会以任何方式更改文件的历史记录。
man页hg(1)对forget的说明如下:
标记指定的文件,以便它们在下一次提交后不再被跟踪。这仅会从当前分支中删除文件,并不会从整个项目历史中删除它们,也不会从工作目录中删除它们。
关于remove的说明如下:
安排从存储库中删除指定的文件。这仅从当前分支中删除文件,而不是从整个项目历史中删除文件。
"hg remove b"
命令,即该文件已添加但未提交,Mercurial会做出响应: not removing b: file has been marked for add (use forget to undo)
文件可以被跟踪或不被跟踪,您可以使用 hg add 来跟踪一个文件,使用 hg remove 或 hg forget来取消跟踪。不带标志地使用 hg remove 将同时删除文件和取消跟踪, hg forget 将只是简单地取消跟踪而不删除它。