如何在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>"