- Redmine の Wiki はバージョン管理されています。
- 最新は DB wiki_contents テーブルに格納されていて、通常はこれを参照。
- 旧バージョンは wiki_content_version テーブルにバージョン付きで移されて保存。
- Wikiを更新していくと、旧バージョンはどんどん蓄積されていくことになります。
差分を持っているのではありません。
- 旧バージョンから復元が可能だが、ほとんど使わないでしょう。
- wiki_content_version は DB のかなりのスペースを占めているはずです。
- バックアップ&リストアに無駄な時間・リソースを消費してしまいます。
履歴整理の手順
- Wiki ページ右上の「履歴」を押す
- 履歴ページが開く
- リストを一番下までダウン
- 右側の「削除」ボタンを押す
- よろしいですか → 「OK」を押す
- 直近の2~3個を残して古いものは削除する
どの Wiki ページのバージョンがたくさんあるかの確認
Redmine DB で下記 SQL を実行
select page_id,count(page_id) from wiki_content_versions group by page_id order by count(page_id) DESC;
ページカウント(Wikiページのバージョンの数)が多いページの ID が上位に表示されます。
下記の例ではページID 2132 のWikiページの履歴(保存されたバージョン)が32個あります。(phpMyAdminで実施しています)
更に詳しく
どのプロジェクトのWikiなのかを調査するSQL の例
2024/1/15 SQLが間違っていたので修正しました
select
v.page_id as page_id,count(v.page_id) as count,wp.id,wiki_id,wp.title as wiki_title,
w.project_id , p.name as project, p.identifier as proid, wc.text as text
from
wiki_content_versions v,
wiki_pages wp,
wikis w,
wiki_contents wc,
projects p
where
v.page_id = wp.id and
wp.wiki_id = w.id and
w.project_id = p.id and
v.page_id = wc.page_id
group by page_id,text order by count(page_id) DESC, project_id
limit 100;
これで、Wikiページが属するプロジェクト、Wikiページのタイトルが判明しました。
この方法で、Wiki履歴が溜まっているページを調査。最新2~3の履歴以外を削除したところ。私の環境では Databaseの非圧縮バックアップのサイズが 1/3 になりました。
php のサンプル
- 履歴の数でSORTして多いもの100個を、プロジェクト、Wikiタイトル、履歴の数、テキストを表示します。
<?php
if(!isset($_SESSION)){ session_start();}
$basedir = dirname(__FILE__) . '/..';
$webroot = $_SERVER['DOCUMENT_ROOT'];
$db = new DB_ACCESS('redmine');
$dbh = $db->connect();
table_style();
rm_WikiList_Header();
$sql = "select
v.page_id as page_id,count(v.page_id) as count,wp.id,wiki_id,wp.title as wiki_title,
w.project_id , p.name as project, p.identifier as proid, wc.text as text
from
wiki_content_versions v,
wiki_pages wp,
wikis w,
wiki_contents wc,
projects p
where
v.page_id = wp.id and
wp.wiki_id = w.id and
w.project_id = p.id and
v.page_id = wc.page_id
group by page_id,text order by count(page_id) DESC,
project_id
limit 100";
$stmt = $dbh ->prepare($sql);
$stmt -> execute();
while($table = $stmt -> fetch(PDO::FETCH_ASSOC)) {
$table['text'] = substr($table['text'],3,100);
$wikiRoot = 'http://url_address/redmine/projects/' . $table['proid'] . "/wiki/" . $table['wiki_title'] . "/history";
rm_showWikiPageCountt($table,$wikiRoot);
}
$dbh = null;
//session_unset();
end_table();
?>
$wikiRoot の URL は対象の Redmine の URL を指定してください。
表示を下記の様にすると Link をクリックすると直接対象 Wiki の履歴ページが開きます。
form.php
<?php
function rm_WikiList_Header(){
?>
<table class="table2" border="1" >
<tr>
<th width="20%" scope="col">プロジェクト</th>
<th width="20%" scope="col">Wiki Title</th>
<th width="8%" scope="col">履歴カウント</th>
<th width="52%" scope="col">テキスト</th>
</tr>
<?php
}
//
function rm_showWikiPageCount($table,$wikiRoot){
?>
<tr>
<td ><?php print($table['project']); ?> </td>
<td bgcolor=snow><a href="<?php print($wikiRoot); ?> " target="_blank"><?php print($table['wiki_title']); ?> </td>
<td align="center"><?php print($table['count']); ?> </td>
<td ><?php print($table['text']); ?> </td>
</tr>
<?php
}
?>