【问题标题】:Extract commit date from a Mercurial bundle从 Mercurial 包中提取提交日期
【发布时间】:2011-12-04 13:45:14
【问题描述】:

简而言之:

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 文件中。 这些文件位于.hg/strip-backup/;似乎它们被称为 bundles。 (它们是在推送到 Subversion 时创建的, 子树被反复从树上剥离 在hg push 创建的 SVN 提交被拉回 Mercurial 后重新附加。 请参阅上面的“缓慢”链接并在页面上搜索 Patrick Mézards cmets。) 我可以从捆绑包中提取日期,然后提取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

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

【问题讨论】:

    标签: svn mercurial hgsubversion


    【解决方案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 clone 已将所有修订设置为其推送时间,并且可能无法重新获取这些更改的修订)。

    【讨论】:

    • 谢谢。事实上,最早的备份将包含所有个原始提交日期,用于后续提交。我错误地认为我必须检查所有备份文件。也感谢关于重新克隆的通知;实际上必须这样做,除非我接受在我的 Mercurial 回购中有错误的日期。如果我可以欺骗 HgSubversion 设置提交日期,并且提交 before 从 Subversion 拉回修订版,那就太酷了。有时间会去看看源码。
    猜你喜欢
    • 2020-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2023-03-24
    • 2020-12-31
    • 1970-01-01
    相关资源
    最近更新 更多