web-dev-qa-db-ja.com

Mercurialで特定のバージョンのファイルを取得する方法は?

私はMercurialが初めてです。正しいコマンドが見つかりません。運のないアップデート/チェックアウトを試みました。ローカルリポジトリを使用しています。ありがとう

107
Codism

hg revert -r<rev> <file>(これにより、そのファイルは指定されたリビジョンのままになります)。

148
djc

Djcが言ったように、revertは以前のリビジョンと一致するようにファイルを変更します。所定の場所に配置したくない場合は、hg cat -r revisionid filename(もちろんrevisionidとfilenameを使用)を使用して、ファイルをstdoutに出力し、任意の場所にリダイレクトするのに適しています。

81
Ry4an Brase

hg revertは実際にこの問題を解決します。しかし、あなたは単にあなたの質問への答えよりも幅広いことについて混乱していると思い、より完全に答えようとすることを望みます。

hg updateはリポジトリ全体のコマンドであり、個々のファイルでは機能しません。この点でSubversion 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を形成します。

24
Omnifarious

特定のファイルの特定のリビジョンを抽出するには、Windowsでこれを実行できます。

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

ここで、9はリビジョン番号です。

またはさらに良い:

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

以前のバージョンを取得しようとしてここに来たので、正確なコマンドは次のとおりです。

hg revert -r .~1 <file>
1
cmcginty