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

时间:2016-11-08 16:31:51

标签: python mercurial

有没有办法合并来自几个不同的Mercurial存储库的更改日志?通过“合并”这里我只是意味着集成到一个显示器;这与源控制意义上的合并无关。

换句话说,我想一次在几个不同的存储库上运行if ($result = $conn->query($query)) { /* fetch object array */ while ($row = $result->fetch_row()) { echo "<p class='lead'>" . $row[0] . "</p>"; } /* free result set */ $result->close(); } 。这些条目应按日期排序,无论它们来自哪个存储库,但仅限于最后 n 天(可配置),并且应包括来自所有存储库的所有分支的条目。按作者过滤并在像TortoiseHg这样的图形客户端中执行此操作也会很不错。有谁知道现有的工具或脚本会这样做?或者,如果不这样,一个以程序方式访问日志条目的好方法? (Mercurial是用Python编写的,这是理想的,但是我找不到关于这个简单API的任何信息。)

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

1 个答案:

答案 0 :(得分:1)

我想出了一种自己做的方法。简而言之,我将所有修订合并为一个mega-repo,然后我可以在TortoiseHG中查看它。当然,它总是一团糟,但它足以得到最近发生的事情的总结。

我分三步完成:

  1. (可选)使用分支图功能在每个源存储库上运行hg convert,将每个分支从original重命名为reponame/original。这使得以后更容易识别哪个修订来自哪个源存储库。 (更忠实于SVN将改为使用filemap功能。)
  2. 在新的存储库中,运行hg pull -f以强制从单个存储库拉入一个大存储库。这会在一个地方获得所有修订,但它们会以错误的顺序出现。
  3. 使用this answer中描述的方法创建另一个存储库,其中包含步骤2中创建的所有更改,但按正确的顺序排序。 (实际上我使用了一个轻微的变体:我得到哈希并与目的地中的哈希进行比较,检查目的地是否有源的前缀,并且只复制新的。)
  4. 这一切都是从Python脚本完成的,但是虽然Mercurial是用Python编写的,但我只是使用命令行界面使用subprocess模块。运行这三个步骤只会复制新修订版,而无需从头开始重建所有内容,除非您添加新的仓库。