简而言之:
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
捆绑包的文件格式是什么,如何提取提交日期信息?
答案 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将所有修订设置为其推送时间,并且可能无法重新获取这些已更改的修订版。)