回答:
私はあなたが望んでいると思いますhg revert -r<rev> <file>
(これはそのファイルを与えられたリビジョンのように変更します)。
djcが言ったようにrevert
、以前のリビジョンと一致するようにファイルを変更します。それをhg cat -r revisionid filename
適切に配置したくない場合は、(もちろんリビジョンIDとファイル名を置き換えて)ファイルをstdoutに出力し、任意の場所にリダイレクトするのに適しています。
hg revert
確かにこの問題を解決します。しかし、あなたは単にあなたの質問に対する答えより広い範囲について混乱していて、もっと完全に答えようと試みたいと思います。
hg update
リポジトリコマンド全体であり、個々のファイルでは機能しません。この点で、サブバージョンとは異なりsvn update
ます。そうするとhg --help update
、コマンドがファイル引数を取らないため、これが当てはまることがわかります。リポジトリ全体を特定のスナップショットに移動するために使用できますが、1つのファイルだけに移動することはできません。
入力hg --help
すると、コマンドのリストが表示されます。これはかなり大きくてやっかいなリストですが、これを読むと次の行が見つかります。
revert restore individual files or directories to an earlier state
さて、比較のために最後の状態だけが必要な場合は、関心のある別のコマンドがあり、それはですhg cat
。これにより、特定のリビジョンのファイルの内容を印刷できます。次に、その出力を他のファイルにリダイレクトできます。次に、ファイルの以前の既知の適切なバージョンと古いバージョンを並べて比較できます。
Mercurialが別のupdate
コマンドを持っている理由は、Subversionでは不可能なMercurialで何かを行うことができるためです。あなたはできるupdate
以前のバージョンに、変更は、その後、コミットします。これによりブランチが作成されます。このupdate
コマンドは、現在の作業ディレクトリの親リビジョンも変更し、そのディレクトリ内のすべてのファイルの内容をその親リビジョンのバージョンに変更する効果もあります。
つまりrevert
、ファイルの内容(またはコマンドに正しい引数を指定した場合はリポジトリ全体)を変更しますが、現在の作業コピーの親リビジョンはそのままにします。
hg parents
コマンドを使用して、現在の作業コピーの親リビジョン(またはマージの場合はリビジョン)を見つけることができます。
Subversionでは、リビジョンは厳密に線形の進行です。Mercurialは帽子をかぶったところで分岐を作成し、それらはマージするのとほとんど同じくらい簡単です。改訂はDAGを形成し、厳密に線形の進行ではありません。
特定のファイルの特定のリビジョンを抽出するには、Windowsでこれを行うことができます。
hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"
ここで、9はリビジョン番号です。
またはさらに良い:
hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"