1

简而言之:

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

捆绑包是什么文件格式,如何提取提交日期信息?

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 存储库的克隆,因为存储库中的 svn 元数据,从您将变更集推送到 subversion 的位置,在 svn 属性更改之后是错误的(当前的 svn 克隆已将所有修订设置为其推送时间,并且可能无法重新获取这些更改的修订)。

于 2011-12-04T16:30:18.020 回答