1

手短に:

Mercurial バンドルのファイル形式は? コミット日付情報を抽出するにはどうすればよいですか?

全体の話:

HgSubversionを使い始めました。この Mercurial 拡張機能を使用すると、Mercurial リポジトリで作業し、Subversion からプッシュおよびプルできます。

昨日、2 か月分の変更を Subversion にプッシュしました。2 つの驚き:

  • 200 件のhg pushコミットに約 2 時間かかりました。
  • 元のhg commit日付は失われ、日付に取って代わられhg pushます。

メーリングリストで遅さの説明pushを見つけました。わかりました、私はそれに簡単に適応できます: 早めにプッシュし、頻繁にプッシュします。これをしなければならないことを知っておく必要があります。

元のコミット日が失われていることに失望しています。HgSubversion によって制定された日付の置換は、ほとんどのシナリオで理にかなっていることがわかります。ただし、私のシナリオでは意味がありません。

幸いなことに、元のコミット日はストリップ バックアップ ファイルに含まれています。これらのファイルは次の場所に.hg/strip-backup/あります。それらはバンドルと呼ばれているようです。(これらは、Subversion へのプッシュ中に、によって作成された SVN コミットが Mercurial に引き戻された後、サブツリーがツリーから繰り返し剥がされて再接続されるときに作成されhg pushます。上記の「速度低下」リンクを参照し、Patrick Mézards のコメントのページを検索してください。 ) バンドルから日付を抽出し、Subversion でリセットするsvn:dateことができました。

しかし、バンドルに含まれる情報にアクセスするにはどうすればよいでしょうか? 既知の圧縮形式ではないようです。

$ 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

バンドルのファイル形式と、コミット日付情報を抽出する方法を教えてください。

4

1 に答える 1

1

によって古いリビジョンのリポジトリを取得できます

mkdir foo
cd foo
hg init
hg pull ~/RepoHgSvn
hg pull ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg

次に、svnリビジョンが元のリビジョンに沿っているリポジトリがあります。

ただし、svnでコミット日を変更する場合は、元のsvnリポジトリのクローン作成をやり直す必要があります。これは、変更セットをSubversionにプッシュしたリポジトリ内のsvnメタデータが、後でsvnプロパティの変更(現在のsvnクローン)で間違っているためです。すべてのリビジョンがプッシュ時間に設定されており、変更されたリビジョンを再フェッチできない場合があります)。

于 2011-12-04T16:30:18.020 に答える