从Mercurial包中提取提交日期

时间:2011-12-04 13:45:15

标签: svn mercurial hgsubversion

简而言之:

Mercurial捆绑包含哪些文件格式? 如何提取提交日期信息?

全文:

我已经开始使用HgSubversion了。 这个Mercurial扩展允许您处理Mercurial仓库并从Subversion推送。

昨天我将两个月的变化推回Subversion。 两个惊喜:

  • hg push需要大约两个小时才能完成200次提交。
  • 原始hg commit日期已丢失并被hg push日期取代。

我找到了explanation for the push slowness on the mailing list。 好吧,我可以很容易地适应:早期推动,经常推动。 你必须知道你必须这样做。

我对最初的提交日期丢失感到失望。 我可以看到HgSubversion制定的日期替换对大多数场景都有意义。 但是,它对我的​​场景没有意义。

幸运的是,原始提交日期包含在 strip-backup files 中。 这些文件位于.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

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

1 个答案:

答案 0 :(得分:1)

您可以通过

获取包含旧版本的存储库
mkdir foo
cd foo
hg init
hg pull ~/RepoHgSvn
hg pull ~/RepoHgSvn/.hg/strip-backup/ecbe9ff1cf0b-backup.hg

然后你有一个repo,其中svn版本是原始版本。

但是当您更改svn中的提交日期时,您需要重做原始svn存储库的克隆,因为存储库中的svn元数据,从您将更改集推送到subversion,之后svn属性更改是错误的(当前的svn clone将所有修订设置为其推送时间,并且可能无法重新获取这些已更改的修订版。)