簡潔に:Mercurialバンドルからコミット日付を抽出する
Mercurialバンドルはどのファイル形式ですか? コミットの日付情報を抽出するにはどうすればよいですか?
全体的な話:
私はHgSubversionを使用し始めました。 このMercurial拡張機能を使用すると、Mercurialレポで作業し、Subversionからプッシュ&プルできます。
昨日私は2ヶ月分の変更をSubversionに送り返しました。 二つの驚き:200のコミットのため
hg push
必要な約2時間。- オリジナル
hg commit
の日付は失われ、hg push
の日付に置き換えられました。
私はexplanation for the push
slowness on the mailing listを見つけました。 さて、私は簡単にそれに適応することができます:早く押し、頻繁に押してください。 にはが分かります。
元のコミット日が失われてしまったことに私は失望しています。 ほとんどのシナリオでHgSubversionによって制定された日付の置き換えがわかります。 しかし、私のシナリオでは意味がありません。
元のコミット日付は、のストリップバックアップファイルに含まれています。 これらのファイルは.hg/strip-backup/
にあります。彼らはバンドルと呼ばれるようです。 (Subversionへのプッシュ中に、 サブツリーがツリー から削除され、hg push
によって作成されたSVNコミットがMercurialに引き戻された後に再作成されたときに作成されます。 上記の「遅さ」リンクを参照してください。 PatrickMézardsのコメントのため) バンドルから日付を抽出し、次にreset the svn:date
in Subversionを抽出できました。
しかし、バンドルに含まれている情報にはどうすればアクセスできますか? 既知の圧縮形式には見えません。
$ mkdir bundle
$ cd bundle
$ cp ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg .
$ file ecbe9ff1cf0b-backup.hg
ecbe9ff1cf0b-backup.hg: Mercurial changeset bundle (bzip2 compressed)
# Okay then ...
$ bzip2 -d ecbe9ff1cf0b-backup.hg
bzip2: Can't guess original name for ecbe9ff1cf0b-backup.hg
-- using ecbe9ff1cf0b-backup.hg.out
bzip2: ecbe9ff1cf0b-backup.hg is not a bzip2 file.
# Okay, the file utility often goes wrong ...
$ mv ecbe9ff1cf0b-backup.hg ecb.bz2
$ bzip2 -d ecb.bz2
bzip2: ecb.bz2 is not a bzip2 file.
$ mv ecb.bz2 ecb.gz
$ gzip -d ecb.gz
gzip: ecb.gz: not in gzip format
$ mv ecb.gz ecb.zip
$ unzip ecb.zip
Archive: ecb.zip
End-of-central-directory signature not found.
$ 7z l ecb.zip
Error: ecb.zip: is not supported archive
バンドルはどのようなファイル形式で、どのようにコミット日付情報を抽出できますか?
ありがとうございました。実際のバックアップには、後続のコミットのすべての元のコミット日付が含まれます。私は誤ってすべてのバックアップファイルを調べなければならないと思っていました。 recloningに関する通知にも感謝します。 Mercurialリポジトリに間違った日付があることを認めない限り、実際にそれを行う必要があります。 Subversionからリビジョンを取り戻す前に、コミット日付を設定することにHgSubversionを騙すことができれば、ちょうどいいでしょう。私が時間を見つけたら、ソースを見てみましょう。 – Lumi