如何合并来自多个 Mercurial 存储库的日志显示

How to merge the display of logs from several Mercurial repositories

有没有办法合并来自多个不同 Mercurial 存储库的更改日志?这里的 "merge" 只是指集成到单个显示器中;这与源代码管理意义上的合并无关。

换句话说,我想同时在几个不同的存储库上 运行 hg log。条目应按日期排序,无论它们来自哪个存储库,但限于最后 n 天(可配置),并且应包括来自所有存储库所有分支的条目。按作者过滤并在像 TortoiseHg 这样的图形客户端中执行此操作也很好。有谁知道可以执行此操作的现有工具或脚本?或者,失败了,以编程方式访问日志条目的好方法? (Mercurial 是用 Python 编写的,这将是理想的,但我找不到任何关于简单 API 的信息。)

背景:我们逐渐开始从SVN过渡到Mercurial。旧的存储库不仅在一台服务器的意义上是整体的,而且在所有项目都有一个巨大的存储库的意义上(尽管具有合理的目录结构)。我们新的 Mercurial 存储库更加专注!总的来说,这工作得更好,但我们错过了 SVN 的一个有用功能:能够在存储库的根目录下使用 svn log 查看我们最近一直在处理的一切。这对于填写时间表、给自己一种目标感等非常有用

我自己想出了一个办法。简而言之,我将所有修订合并到一个大型存储库中,然后我可以在 TortoiseHG 中查看它。当然是乱七八糟的,不过总结一下最近发生的事情已经足够了。

我分三步进行:

  1. (可选)运行 hg convert 在每个源存储库上使用分支映射功能将每个分支从 original 重命名为 reponame/original。这使得以后更容易识别哪个修订来自哪个源存储库。 (更忠实于 SVN 的是改用文件映射功能。)
  2. 在新的存储库中,运行 hg pull -f 将单个存储库强制拉入一个大的存储库。这将所有修订放在一个地方,但它们以错误的顺序显示。
  3. 使用 this answer 中描述的方法创建另一个存储库,其中包含在步骤 2 中创建的存储库的所有更改,但按正确的顺序排序。 (实际上我使用了一个细微的变体:我获取哈希并与目标中的哈希进行比较,检查目标是否具有源的前缀,并且只复制新的。)

这一切都是通过 Python 脚本完成的,但是虽然 Mercurial 是用 Python 编写的,但我只是使用使用 subprocess 模块的命令行界面。 运行除非您添加新的存储库,否则这三个步骤只会复制新的修订版,而不会从头开始重建所有内容。