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

时间:2010-01-21 06:33:20

标签: mercurial

我是Mercurial的新手。只是找不到合适的命令。尝试更新/结账,没有运气。我正在使用本地存储库。感谢

5 个答案:

答案 0 :(得分:145)

我认为您需要hg revert -r<rev> <file>(这会将该文件更改为与给定版本相同)。

答案 1 :(得分:80)

正如djc所说,revert改变了一个文件,以匹配先前的修订版。如果你不希望它没有到位,你可以使用hg cat -r revisionid filename(当然代替revisionid和filename)将文件输出到stdout,适合重定向你想要的任何地方。

答案 2 :(得分:23)

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,而非严格的线性进展。

答案 3 :(得分:11)

要提取特定文件的特定版本,您可以在Windows上执行此操作:

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

这里,9是修订号。

甚至更好:

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

答案 4 :(得分:0)

在这里尝试获取以前的版本,所以这里是确切的命令:

hg revert -r .~1 <file>