如何在Mercurial中获取特定版本的文件?
我是Mercurial的新手。 只是找不到正确的命令。 尝试更新/结帐没有运气。 我正在使用本地存储库。 谢谢
我想你想要hg revert -r<rev> <file>
(这会将该文件更改为与给定的修订版相同)。
正如djc所说, revert
改变了一个文件,以配合以前的修订。 如果你不想要它,你可以使用hg cat -r revisionid filename
(代替当然是revisionid和filename),它将文件输出到stdout,适合redirect你喜欢的任何地方。
hg revert
确实解决了这个问题。 但是我认为你对于更广泛的事情感到困惑,而不是简单地回答你的问题,并且想要更全面地回答。
hg update
是一个完整的存储库命令,不能用于单个文件。 这是不像颠覆svn update
这种方式。 如果你做hg --help update
你可以看到这种情况,因为这个命令不带任何文件参数。 它可以用来移动你的整个资料库到一个特定的快照,但不能用来做到只有一个文件。
如果你inputhg --help
你会看到一个命令列表。 这是一个相当庞大和令人生畏的名单,但是如果你仔细阅读,你会发现这一行:
revert restore individual files or directories to an earlier state
现在,如果你只是想要比较的最后一个状态,还有另一个你可能感兴趣的命令,那就是hg cat
。 这将允许您打印出任何特定版本的文件内容。 然后,您可以将其输出redirect到其他文件。 然后你可以把你的文件的旧版本和旧版本并排比较。
Mercurial有一个单独的update
命令的原因是,有可能在Mercurial中做一些在Subversion中不可能的事情。 您可以update
到较早的版本,进行更改,然后提交。 这将创build一个分支。 update
命令的作用是也改变当前工作目录的父修订版本,并将该目录中所有文件的内容更改为该父版本的版本。
这意味着revert
更改文件的内容(甚至如果您给命令正确的参数,甚至整个存储库),但留下当前工作副本的父修订相同。
您可以使用hg parents
命令找出当前工作副本的父版本(或在合并情况下的版本)。
在Subversion中,修订是一个严格的线性过程。 Mercurial创造了一个帽子分支,他们几乎一样容易合并。 修订形成一个DAG,而不是一个严格的线性进展。
要提取特定文件的特定版本,您可以在Windows上执行此操作:
hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"
这里的9是修订号。
甚至更好:
hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"