如何比较两个 MediaWiki 站点

How to compare two MediaWiki sites

我们将一个私人 MediaWiki 站点移到了新服务器上。几个月后,我们发现一两个用户继续更新旧的 MediaWiki 站点。所以我们在旧服务器中有一些编辑需要复制到新服务器中。

有谁知道可以(方便地?)比较和识别旧站点中的编辑的例程或流程吗?

根据附加到此 post 的评论,如果该页面接受开始日期,“最近的更改”页面可能会起作用。不幸的是,它被限制为最多 30 天。在这种情况下,我需要审查12个月的变化。

确定已完成的编辑

识别并验证您的用户自分叉以来所做的编辑

使用数据库(假设 MySQL)并且没有 table 前缀

给我自 2018 年 12 月 1 日(包括该日期)以来完成的所有编辑:

SELECT rev_id, rev_page, rev_text_id, rev_comment, rev_user, rev_user_text, rev_timestamp
FROM   revision
WHERE  rev_timestamp > '20181201';

请注意,实际页面文本存储在 text table 中,页面名称存储在 page table.

给我自 2018 年 12 月 1 日(包括该日期)以来完成的所有编辑以及页面名称和修订文本:

SELECT rev_id, rev_page, page_namespace, page_title, rev_text_id, rev_comment, rev_user, rev_user_text, rev_timestamp, old_text
FROM revision r
LEFT JOIN page p
   ON p.page_id = r.rev_page
LEFT JOIN text t
   ON t.old_id = r.rev_text_id
WHERE rev_timestamp > '20181201';

请注意,使用 MySQL Workbench 等工具,您可以将结果复制为 MySQL 插入语句。根据用户对旧 wiki 所做的操作,您可能只需要传输 3 tables 的记录;但是,如果涉及到文件上传、删除或用户权限更改,那就变得复杂了。您可以通过 logging table.

跟踪这些变化

使用网络界面

当然可以显示过去 30 天的变化,而不仅仅是 500 次。允许您配置它的设置是 $wgRCLinkLimits and $wgRCLinkDays。您也可以只打开最近更改页面,点击 30 天并更改 URL 参数,使 URL 变为 path/to/index.php?title=Special:RecentChanges&days=90&limit=1500(过去 90 天内限制为 1500)。

最近更改历史记录保留的长度取决于 $wgRCMaxAge。目前是 90 天,但如果清除作业尚未删除旧条目,您可能很幸运。

可以不受限制地查看日志。在您的 wiki 中访问 Special:Log

使用 API

list=allrevisions 列出所有页面修订(即更改)。

它允许指定开始时间戳 (arvstart) 和继续。

示例:https://commons.wikimedia.org/w/api.php?action=query&list=allrevisions&arvlimit=1000

要查看删除、用户权限更改、上传...使用 list=logevents

解决问题

要么使用数据库脚本(不要忘记之前备份),要么在源 wiki 中使用 Special:Export,在需要更新的 Wiki 中使用 Special:Import

避免该问题

为了将来迁移到新服务器,$wgReadOnly 可能是你的朋友,首先通过将旧 wiki 设为只读来避免这个问题。

还有Extension:Sync,虽然我不确定它能做什么。