Git Plugin for Trac

Description

This is yet another plugin for Trac 0.10/0.11 which enables GIT to be used instead of Subversion for the trac:VersioningSystemBackend

Features

  • Browsing source code in a Git repository via the TracBrowser
  • Viewing the change history of a file or directory using TracRevisionLog
  • Performing diffs between any two files or two directories
  • Displaying submitted changes in the TracTimeline (0.11)
  • (Optionally) caching TracChangeset information in Trac's database (0.11)
  • Caching Git commit relation graph in memory (0.11)
  • Using the TracSearch page to search change descriptions (0.11)
  • Annotation support, also known as "blame" operation (0.11)
  • Interpretation of 40-character wide hex-strings as sha1 commit checksums
  • ...

Requirements

0.10 Plugin 0.11 Plugin
Trac 0.10.x 0.11.x
Python 2.4+ 2.5+
GIT 1.4.4+ 1.5.2+ (for plugin v0.11.0.1)
1.5.6+ (for plugin v0.11.0.2+)

Example Sites

Bugs/Feature Requests

As this is for now just a proof of concept implementation, it has quite some deficiencies, some of which exist as tickets already:

#746
Improve performance of GitPlugin
#1040
support for multiple repos
#2633
It should be possible to see the branch in the timeline and for each changeset
#2685
shortrev_len does not work
#3104
internal error (got unexpected object kind 'commit') when going to "Browse source"
#3411
Python 2.4 backport (done)
#3593
Improve display of merge changesets
#3842
Error calculating changeset size? TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
#3888
WikiLinking branch heads?
#4318
Need help with documentation
#4505
Resetting HEAD on a remote branch causes GitPlugin to complain of missing changeset
#4733
missing post commit hook
#5273
SyntaxErrors in PyGit.py and git_fs.py in revision 5846
#5310
GitPlugin requires Python 2.5
#5351
Incorrect author in timeline and log - GitPlugin shows committer instead of author
#5357
Trac detected an internal error:
#5385
GitPlugin reveals email in field "git-comitter" -- can't be turned off

...and other potential issues/todos which aren't ticket-tracked yet:

  • does not highlight sha1sums automatically
  • issues with filenames containing newlines (seems to be a Trac bug)
  • ...

Existing bugs and feature requests for GitPlugin are here (all including closed ones are here).

If you have any issues, create a new ticket.

Download, Source

Download the zipped source, check out GitPlugin from Subversion, or browse the source.

(An experimental branch of this plugin with a hacky caching feature and some bug fixes is available from here.)

Configuration

Simply point your Trac instance to a local git repository:

[trac]
repository_dir = /var/git/Test.git
repository_type = git

## the following is only for the 0.11 branch
[git]
## let Trac cache meta-data via CachedRepository wrapper; default: false
cached_repository = true

## disable automatic garbage collection for in-memory commit-tree cache; default: false
persistent_cache = true

## length revision sha-sums should be tried to be abbreviated to (must be >= 4 and <= 40); default: 7
shortrev_len = 6

## executable file name (optionally with path) of git binary; default: 'git'
git_bin = /usr/src/git-dev/git

/!\ NOTE: the Test.git above needs to be the .git repository directory (i.e. the one containing the file HEAD and config), not the working tree directory that holds the .git/ folder.

If installed globally, don't forget to enable the plugin:

[components]
# for plugin version 0.10
gitplugin.* = enabled

# for plugin version 0.11.0.1+
tracext.git.* = enabled 

Recent Changes

[5396] by hvr on 03/24/09 07:29:36

GitPlugin: omit close_fds=True on win32 platform (fixes #4227)

[5395] by hvr on 03/24/09 07:14:27

GitPlugin: whitespace cleanup (fixes #4815)

[5394] by hvr on 03/23/09 19:01:07

GitPlugin: avoid usage of StringIO wrappers throughout PyGIT.py where avoidable

[5393] by hvr on 03/23/09 19:01:04

GitPlugin: optimiziation: make use of git's 1.5.6+ tree-ls -l feature for grabbing blob size instead of individual cat-file -s calls; bump up minimum required git version to 1.5.6

Author/Contributors

Author: Herbert Valerio Riedel
Contributors: Hans Petter Jansson