简而言之:
Mercurial 包的文件格式是什么?如何提取提交日期信息?
整个故事:
我已经开始使用HgSubversion。这个 Mercurial 扩展允许您处理 Mercurial 存储库并从 Subversion 推送和拉取。
昨天我将两个月的更改推回了 Subversion。两个惊喜:
- 200次
hg push
提交大约需要两个小时。 - 原始
hg commit
日期丢失并被hg push
日期取代。
我在邮件列表上找到了缓慢的解释push
。好的,我可以很容易地适应:早点推送,经常推送。你只需要知道你必须这样做。
我对丢失原始提交日期感到失望。我可以看到 HgSubversion 制定的日期替换对于大多数情况都是有意义的。但是,这对我的场景没有意义。
幸运的是,原始提交日期包含在剥离备份文件中。这些文件位于.hg/strip-backup/
;似乎它们被称为bundles。(它们是在推送到 Subversion 时创建的,在hg push
将由) 我可以从包中提取日期,然后在 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
捆绑包是什么文件格式,如何提取提交日期信息?