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


114

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


@Omnifarious:安定したバージョンのファイルをコミットしました。その後、ファイルの作業を続けましたが、すぐに最後の「適切な」バージョンが必要であることに気付きました。これはsvnのupdateで実行できますが、hg updateを実行すると、「0ファイル...」と表示されます
Codism

回答:


153

私はあなたが望んでいると思いますhg revert -r<rev> <file>(これはそのファイルを与えられたリビジョンのように変更します)。


うん、それはまさに彼が望んでいることです。:-)
2010年

9
または、現在の変更を破棄してコミットされた最新のものを取得する場合は、hg revert <filename>
BlackTigerX

@BlackTigerXリビジョンがない場合、変更されていないファイルは、最後にコミットされたバージョンでなくても、何にも戻されません。私は時々これをリビジョン間のファイルの「チェリーピック」に使用するので、それは重要です。
user2864740 2016年

83

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


4
まさに、私が望んでいたもの。
yota

素晴らしい、そのようなことを聞​​くのはいつも素晴らしいことです。
Ry4an Brase 2015年

24

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を形成し、厳密に線形の進行ではありません。


13

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

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

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

またはさらに良い:

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

1

以前のバージョンを取得しようとしてここに来たので、ここに正確なコマンドがあります:

hg revert -r .~1 <file>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.