如何在 Mercurial 中获取文件的特定版本?

我是 Mercurial 的新成员。只是找不到正确的命令。尝试更新/结帐,但没有结果。我正在使用本地存储库。谢谢

48408 次浏览

我认为你想要 hg revert -r<rev> <file>(这将改变该文件,因为它是在给定的修订)。

正如 djc 所说,revert修改了一个文件,以便与之前的修订版相匹配。如果您不希望它在适当的位置,您可以使用 hg cat -r revisionid filename(当然是替换修订 id 和文件名) ,它将输出文件到标准输出,适合于重定向您想要的任何地方。

hg revert确实解决了这个问题。但我认为你对更广泛的事情感到困惑,而不仅仅是你问题的答案,你想要更全面地回答。

hg update是一个完整的存储库命令,不会在单个文件上工作。它不像颠覆 svn update在这方面。如果执行 hg --help update,则可以看到这种情况,因为该命令不接受文件参数。它可用于将整个存储库移动到特定的快照,但不能仅用于对一个文件执行此操作。

如果键入 hg --help,您将看到一个命令列表。这是一个相当庞大且有些令人畏缩的清单,但如果你仔细阅读,你会发现下面这行:

revert       restore individual files or directories to an earlier state

现在,如果您只想要最后一个状态来进行比较,那么还有另外一个命令您可能感兴趣,那就是 hg cat。这将允许您在任何特定的修订版中打印出文件的内容。然后可以将其输出重定向到其他文件。然后,您可以使用以前已知的文件良好版本和旧版本并排进行比较。

Mercurial 之所以有单独的 update命令,是因为可以在 Mercurial 中执行 Subversion 中无法执行的操作。您可以将 update改为早期版本,进行更改,然后提交。这将创建一个分支。update命令的作用是改变当前工作目录的父版本,以及将该目录中所有文件的内容改变为该父版本的版本。

这意味着 revert更改了文件的内容(如果给命令提供了正确的参数,甚至更改了整个存储库) ,但是保留了当前工作副本的父版本不变。

您可以使用 hg parents命令查找当前工作副本的父版本(或者在合并的情况下的版本)。

在 Subversion 中,修订是一个严格的线性级数。Mercurial 可以随时创建分支,而且它们几乎同样容易合并。修正形成 DAG,而不是严格的线性级数。

要提取特定文件的特定版本,可以在 Windows 上进行:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

这里,9是修订号。

或者更好:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"

来这里是为了得到之前的版本,所以这里是准确的命令:

hg revert -r .~1 <file>