Как мигрировать с Trac на Redmine
Важно: перед началом отключите Trac, чтобы пользователи не вносили изменения во время миграции.
Цели статьи и варианты запроса
- Основная цель: перенести проекты из Trac в Redmine с минимальной потерей данных.
- Варианты запросов: миграция Trac в Redmine, перенос тикетов Trac в Redmine, миграция SVN и тикетов, импорт timelog Trac в Redmine.
1. Резервное копирование данных Trac
Перед любыми операциями сделайте полную резервную копию файлов и базы данных Trac.
ssh oldtracserver
cd /var/lib/
tar -czf trac.tar.gz trac
scp /var/lib/trac.tar.gz newredmineserver:/tmp/Примечание: убедитесь, что резервная копия хранится на отдельном хосте или в защищённом каталоге.
2. Установка Redmine на новом сервере
Установка обычно простая, но standalone-сервер требует дополнительных прав доступа:
aptitude install redmine
cd /usr/share/redmine/
mkdir tmp
chown -R www-data:www-data tmp/
mkdir log
touch log/production.log
chown -R www-data:www-data log/
# Running the standalone server
sudo -u www-data X_DEBIAN_SITEID="default" ruby script/server webrick -e production -b newredmineserveripПосле запуска откройте http://newredmineserver:3000 и убедитесь, что страница Redmine отображается.
3. Установка и использование тестовой (development) среды
Рекомендую сначала выполнять миграцию в тестовой среде — так вы избежите ошибок в production и сможете отладить процесс.
Откройте конфигурацию базы данных:
vi /etc/redmine/default/database.ymlПример конфигурации для development:
development:
adapter: sqlite3
database: /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default-dev
encoding: utf8
Команды для запуска тестовой среды:
cd /usr/share/redmine
rake db:migrate RAILS_ENV="development"
rake redmine:load_default_data RAILS_ENV="development"
touch log/development.log
chown -R www-data:www-data log/
chown www-data:www-data /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default-dev
sudo -u www-data X_DEBIAN_SITEID="default" ruby script/server webrick -e development -b newredmineserverip -p 3001После этого вы сможете безопасно тестировать импорт и исправлять скрипты.
4. Очистка тестовой среды Redmine
Если тестовая БД испорчена, быстро восстановите чистую инсталляцию:
rm /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default*
rm /var/lib/redmine/default/files/*
cd /usr/share/redmine
rake db:migrate RAILS_ENV="production"
rake db:migrate RAILS_ENV="development"
rake redmine:load_default_data RAILS_ENV="development"
rake redmine:load_default_data RAILS_ENV="production"
chown www-data:www-data /var/lib/dbconfig-common/sqlite3/redmine/instances/default/redmine_default*5. Миграция базы данных Trac в Redmine
Автор этого руководства использовал модифицированный скрипт миграции, который расширяет стандартный импорт Redmine и импортирует больше данных из Trac:
Ключевые улучшения скрипта:
- Перенос изменений свойств тикетов: смена владельца (re-assignment), компонента (категории), приоритета, заголовка, типа задачи, процента выполнения.
- Заполнение done_ratio через отображение resolution -> ratio (пример):
RATIO_MAPPING = {'' => 0,
'fixed' => 100,
'invalid' => 0,
'wontfix' => 0,
'duplicate' => 100,
'worksforme' => 0}- Обработка поля CC как добавление наблюдателей (watchers).
- Добавление даты начала (по дате первого комментария) и даты завершения (когда done_ratio=100%) для календаря и диаграмм Ганта.
- Перенос записей учёта времени (timelog) из плагина timeandestimation: фактически затраченные часы и ссылки в комментариях на номера тикетов.
- Добавление отдельного трекера задач с корректным workflow и маппингом из Trac.
- Включение всех модулей Redmine по умолчанию (для простоты).
Исправления и хаки в скрипте:
- Добавление автора тикета в список репортёров проекта.
- Корректное время обновления тикета.
- Хитрый хак: принудительная смена типа custom field ‘billable’ на чекбокс (правильное решение — парсить trac.ini).
Скрипт (migrate_from_trac.rake) и патч для trunk доступны в публичном SVN/репозитории автора. После размещения скрипта выполните:
rake redmine:migrate_from_trac RAILS_ENV="production"
WARNING: a new project will be added to Redmine during this process.
Are you sure you want to continue ? [y/N] y
Trac directory []: /tmp/trac/mytracproject
Trac database adapter (sqlite, sqlite3, mysql, postgresql) [sqlite3]:
Trac database encoding [UTF-8]:
Target project identifier []: myredmineproject
# Repeat for all projects
rake redmine:migrate_from_trac RAILS_ENV="development"
# Repeat for dev environmentЗамечание: timelog-комментарии по умолчанию не обрабатываются Textile и отображаются как plain text. Чтобы текстиль отображался, можно применить соответствующий патч для Redmine:
cd /usr/share/redmine
wget "http://www.redmine.org/attachments/download/2807/textilize-timelog-entry-comment_r3084.patch"
patch -p0 < textilize-timelog-entry-comment_r3084.patch6. Миграция SVN
Если вы переносите также SVN-репозитории, используйте проверенный поток: дампы на старом сервере, перенос архивов и загрузка в новый репозиторий.
6.1. Резервная копия SVN на старом хосте
ssh oldsvnserver
cd /var/lib/svn/repository
for project in *; do svnadmin dump ${project} | gzip > ${project}.gz ; done
scp *.gz newsvnserver:/tmp/6.2. Импорт на новом хосте
svnadmin create project1
zcat project1.gz | svnadmin load project17. Привязка Redmine к SVN и правки логов коммитов
Если в ваших сообщениях коммитов использовались ссылки типа “See #” или “Fix #”, настройте Redmine для распознавания таких ключевых слов: Администрирование -> Настройки -> Репозиторий (Administration -> Settings -> Repository).
7.1. Добавление pre-revprop-change hook для разрешения модификаций свойств ревизий
cd /var/lib/svn/
vi pre-revprop-changeВставьте:
#!/bin/sh
exit 0И создайте символические ссылки в hooks каждого репозитория:
ln -s /var/lib/svn/pre-revprop-change project1/hooks/
ln -s /var/lib/svn/pre-revprop-change project2/hooks/
...
ln -s /var/lib/svn/pre-revprop-change projectn/hooks/7.2. Модификация логов SVN для замены ссылок на Trac
rake redmine:migrate_from_trac_svn RAILS_ENV="production"
WARNING: all commit messages with references to trac pages will be modified
Are you sure you want to continue ? [y/N] y
Subversion repository url []: file:///var/lib/svn/project1
Subversion repository username []:
Subversion repository password []:
Redmine project identifier []: myredmineproject
# Repeat for all projects
rm */hooks/pre-revprop-change7.3. Настройка репозиториев в интерфейсе проекта
Перейдите в проект -> Настройки -> Репозиторий и добавьте URL репозитория и параметры доступа.

7.4. Синхронизация Redmine с SVN (fetch changesets)
Сначала сгенерируйте ключ в Администрирование -> Настройки -> Репозиторий, затем запустите массовую загрузку:
wget "http://newredmineserver:3000/sys/fetch_changesets?key=8qKxftrhICYt8bPEShVa"8. Обновление до Redmine 1.0.5
Версия Squeeze уязвима на момент 21.04.2011 — обновите пакеты из backports:
aptitude -t squeeze-backports install redmine redmine-sqlite9. Заключение и типичные проблемы
Большая часть проекта автоматически переносится скриптом. Оставшиеся проблемы обычно вызваны «грязными» или плохо отформатированными данными в Trac (например, сломанный HTML в вики-страницах). Такие страницы нужно править вручную.
Дополнения: методология миграции и практические рекомендации
Методология (мини): подготовка, тест, миграция, проверка, откат
- Подготовка: резервные копии (Trac DB, Trac файлы, SVN дампы), уведомление пользователей.
- Тест: разверните Redmine dev, прогоните полную миграцию на копиях. Исправьте скрипт и повторите.
- Миграция: выполните миграцию в production в заранее согласованное окно обслуживания. Отключите Trac и заморозьте коммиты.
- Проверка: прогон smoke-тестов, сверка числа тикетов, комментариев, timelog.
- Откат: если критично — восстановите Trac из резервной копии, откатите созданные проекты в Redmine и повторите процесс.
Роли и чек-листы
Администратор Redmine:
- Сделать бэкапы Trac и SVN.
- Установить Redmine и зависимости.
- Запустить скрипт миграции и мониторить лог.
- Настроить права и интеграцию с LDAP/SMTP при необходимости.
Разработчик / Миграционный инженер:
- Протестировать скрипт в dev.
- Проверить соответствие типов задач и workflow.
- Исправить проблемы с кодировкой и текстиль-форматами.
SVN-администратор:
- Подготовить дампы и создать репозитории на новом хосте.
- Настроить pre-revprop-change hook.
- Запустить fetch_changesets и проверить соответствие ревизий.
Критерии приёмки
- Количество импортированных тикетов = количеству в Trac (или доп. виды объяснены).
- Комментарии и история изменений сохранены и корректно отображаются.
- Записи timelog перенесены и ссылаются на правильные тикеты.
- SVN-репозиторий подключён, и изменения видны в Redmine.
- Основные рабочие процессы (создание/закрытие задач, назначения) проходят проверку тестовой группы.
Когда миграция может не сработать и альтернативы
- Сложные кастомные плагины Trac, которые сильно модифицируют данные — может потребоваться ручной перенос или разработка адаптера.
- Повреждённые или неконсистентные данные (например, сломанные вики-страницы) — потребуется ручная чистка.
Альтернативные подходы: частичный импорт (только тикеты), разработка собственного конвертера на Python/Ruby, либо поддерживать Trac и интегрировать ссылки между системами.
Технические советы и чекпоинты
- Всегда проверяйте кодировку (UTF-8) в базе Trac перед импортом.
- Тестируйте mapping custom fields и workflow заранее.
- Для больших проектов проводите миграцию в несколько этапов по проектам.
- Логи rake-скриптов изучайте сразу — большинство ошибок видно в stderr.
Приватность и соответствие требованиям (общая заметка)
При переносе данных проверьте местные требования по хранению персональных данных и доступу (GDPR/локальные правила): удалите или анонимизируйте чувствительные поля перед публикацией в новой системе.
Пользовательский план отката (Runbook)
- Если после миграции обнаружены критические несоответствия — немедленно отключите Redmine (режим обслуживания) и восстановите Trac из архива.
- Откат Redmine: удалить созданные проекты и импортированные репозитории, восстановить старую БД Redmine из бэкапа (если он был сделан заранее).
- Провести анализ ошибок и повторить миграцию в тестовой среде с исправлениями.
Отладка распространённых ошибок
- Проблемы с кодировкой: проверить значения поля database.encoding и перекодировать дамп при необходимости.
- Отсутствие прав на файлы: убедиться, что www-data владеет каталогами tmp и log.
- Неправильные ссылки в timelog: применить текстиль-патч для комментов timelog.
Сводка
- Миграция Trac → Redmine выполнима и может быть почти полностью автоматизирована при помощи кастомного скрипта.
- Всегда тестируйте на dev, делайте полные бэкапы и согласуйте окно миграции с пользователями.
- Подготовьте план отката и чек-листы для каждой роли.
Короткие полезные ссылки:
- Redmine: https://www.redmine.org/
- Trac: https://trac.edgewall.org/
- Оригинальная инструкция и патчи (см. источник автора)
Похожие материалы
Кнопка Camera Control на iPhone 16 — руководство
Separation Alerts на iPhone — как не забывать вещи
Исправить Steam: friends network unreachable
Android N-ify: стиль Android Nougat на вашем устройстве