Skip to main content

convert Trac tickets to Github issues

Project description

Tratihubis converts Trac tickets to Github issues by using the following steps:

  1. The user manually exports the Trac tickets to convert to a CSV file.

  2. Tratihubis reads the CSV file and uses the data to create Github issues and milestones.


To install tratihubis, use pip or easy_install:

$ pip install tratihubis

If necessary, this also installs the PyGithub package.


Information about Trac tickets to convert has to be provided in a CSV file. To obtain this CSV file, create a new Trac queries using the SQL statement stored in query_tickets.sql and query_comments.sql. Then execute the queries and save the results by clicking “Download in other formats: Comma-delimited Text” and choosing for example /Users/me/mytool/tickets.csv and /Users/me/mytool/comments.csv as output files.

Next create a config file to describe how to login to Github and what to convert. For example, you could store the following in ~/mytool/tratihubis.cfg:

user = someone
password = secret
repo = mytool
tickets = /Users/me/mytool/tickets.csv
comments = /Users/me/mytool/comments.csv

Then run:

$ tratihubis ~/mytool/tratihubis.cfg

This tests that the input data and Github information is valid and writes a log to the console describing which operations would be performed.

To actually create the Github issues, you need to enable to command line option --really:

$ tratihubis --really ~/mytool/tratihubis.cfg

Be aware that Github issues and milestones cannot be deleted in case you mess up. Your only remedy is to remove the whole repository and start anew. So make sure that tratihubis does what you want before you enable --really.

Mapping users

In case the Trac users have different user names on Github, you can specify a mapping. For example:

users = johndoe: jdoe78, *: me

This would map the Trac user johndoe to the Github user jdoe78 and everyone else to the user me. The default value is:

users = *:*

This maps every Trac user to a Github user with the same name.

Mapping labels

Github labels somewhat mimic the functionality Trac stores in the type and resolution field of tickets. By default, Github supports the following labels:

  • bug

  • duplicate

  • enhancement

  • invalid

  • question

  • wontfix

Trac on the other hand has a type field which by default can be:

  • bug

  • enhancement

  • task

Furthermore closed Trac tickets have a resolution which, among others, can be:

  • duplicate

  • invalid

  • wontfix

The labels config option allows to map Trac fields to Github labels. For example:

labels = type=defect: bug, type=enhancement: enhancement, resolution=wontfix: wontfix

Here, labels is a comma separated list of mappings taking the form <trac-field>=<trac-value>:<github-label>.

In case types or labels contain other characters than ASCII letters, digits and underscore (_), put them between quotes:

labels = type="software defect": bug


You can find some notes on this in issue #19 <>: Add documentation for attachmentsprefix.


The author of Github issues and comments always is the user specified in the config, even if a different user opened the original Trac ticket or wrote the original Trac comment.

Github issues and comments have the current time as time stamp instead if time from Trac.

Github issue descriptions contains the raw Trac Wiki markup, there is no translation to Github markdown.

The due date of Trac milestones is not migrated to Github milestones, so when the conversion is done, you have to set it manually.

Trac Milestone without any tickets are not converted to Github milestone.


In case of questions and problems, open an issue at <>.

To obtain the source code or create your own fork to implement fixes or improvements, visit <>.


Copyright (c) 2012-2013, Thomas Aglassinger. All rights reserved. Distributed under the BSD License.


Version 0.5, 2013-02-13

(Contributed by Steven Di Rocco)

  • Added support for file attachments.

  • Added work around for information lost due GitHub API limitations: * Added trac commenter and date at the top of each comment. * Added automatic comment to each isseu showing original author, date authored, and last modification date.

  • Fixed API calls to work with PyGithub 1.8.

Version 0.4, 2012-05-04

  • Added config option labels to map Trac status and resolution to Github labels.

Version 0.3, 2012-05-03

  • Added config option comments to convert Trac ticket comments.

  • Added closing of issue for which the corresponding Trac ticket has been closed already.

  • Added validation of users issues are assigned to. They must have an active Github user.

Version 0.2, 2012-05-02

  • Added config option users to map Trac users to Github users.

  • Added binary in order to run tratihubis instead of python -m tratihubis.

  • Changed supposed issue number in log to take existing issues in account.

Version 0.1, 2012-05-01

  • Initial release.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution (29.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page