= Git Plugin for Trac = [[PageOutline]] == Description == This is yet another plugin for Trac 0.10/0.11/0.12/0.13dev which enables [http://git.or.cz/ GIT] to be used instead of [http://subversion.tigris.org/ 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 [trac:TracDiff 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 - ... === Example Sites === - [http://nanosleep.org/proj/trac-git-plugin/browser nanosleep.org's GitPlugin branch] (using trac 0.10) - ''TODO: find public sites which use GitPlugin'' === Requirements === || Branch || '''trac-0.10''' || '''trac-0.11'''/'''trac-0.11-py24''' || '''master''' || || Trac || 0.10.x || 0.11.x || 0.12.x/0.13dev || || Python || 2.4+ || 2.5+/2.4+ || 2.5+ || || GIT || 1.4.4+ || 1.5.2+ (for plugin v0.11.0.1) [[BR]] 1.5.6+ (for plugin v0.11.0.2+) || 1.5.6+ || == Bugs/Feature Requests/Contributions == As this is for now just a proof of concept implementation, it has quite some deficiencies, some of which exist as tickets already: [[TicketQuery(component=GitPlugin&status!=closed)]] Existing bugs and feature requests for GitPlugin are [report:9?COMPONENT=GitPlugin here] (all including closed ones are [report:10?COMPONENT=GitPlugin here]). If you have any issues, create a [http://trac-hacks.org/newticket?component=GitPlugin&owner=hvr new ticket]. '''Help is highly appreciated''', since I have very little spare time these days as can be seen in the commit history. Feel free to fork [http://github.com/hvr/trac-git-plugin/ GitPlugin on GitHub] and improve or fix things. == Source Code == The source code is hosted at [http://github.com/hvr/trac-git-plugin/ GitHub] (An experimental branch of this plugin with a hacky caching feature and some bug fixes is available from [http://nanosleep.org/proj/trac-git-plugin/ here].) == Installation == See also generic instructions at trac:TracPlugins If you have a recent [http://pypi.python.org/pypi/setuptools setuptools] version installed, you can directly install GitPlugin from the Github repository. For Trac 0.11: {{{ #!sh easy_install http://github.com/hvr/trac-git-plugin/tarball/trac-0.11 }}} or alternatively the Python 2.4 backport: {{{ #!sh easy_install http://github.com/hvr/trac-git-plugin/tarball/trac-0.11-py24 }}} For Trac 0.12 {{{ #!sh easy_install http://github.com/hvr/trac-git-plugin/tarball/master }}} == Configuration == See also `wiki:TracIni#git-section` of your current Trac installation (if GitPlugin is enabled), for an up-to-date list of customizable `[git]` settings. Simply point your Trac instance to a local git repository, and configure your TracIni: {{{ [trac] # simple single-repository configuration repository_dir = /var/git/Test.git repository_type = git ## the following settings are only supported for plugin version 0.11 or later [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 ## (0.12.0.3+) minimum length for which hex-strings will be interpreted as commit ids in wiki context; default: 40 wiki_shortrev_len = 7 ## executable file name (in case of doubt use absolute path!) of git binary; default: 'git' git_bin = /usr/src/git-dev/git ## (0.12.0.5+) define charset encoding of paths stored within git repository; default: 'utf-8' git_fs_encoding = latin1 ## (0.12.0.3+) enable reverse mapping of git email addresses to trac user ids; default: false trac_user_rlookup = true ## (0.12.0.3+) use git-committer id instead of git-author id as changeset owner; default: true use_committer_id = false ## (0.12.0.3+) use git-committer timestamp instead of git-author timestamp as changeset time; default: true use_committer_time = false }}} === Multi-Repository Configuration === Starting with Trac 0.12, GitPlugin gained support for multi-repository configuration (see also T:TracRepositoryAdmin for generic instructions) ''TODO: write about current issues wrt GitPlugin and how to workaround them'' === post-receive hook scripts === For Trac 0.11 see attachments below. With Trac 0.12 a VC independent plugin approach to handling ticket references in commit messages has been put into place. Thus for 0.12 in you basically need to enable the !CommitTicketUpdater component in `trac.ini` or via the webinterface under 'Admin/Plugins'. Additionally you have to call `trac-admin TRAC_ENV changeset added `, e.g. by putting a `post-receive` script into `your_repository.git/hooks/`. Two examples are available as attachments. [attachment:trac-post-receive-hook-0.12-only-master.py] - example that adds to Trac only commits to the master (or other specified) branch [attachment:trac-post-receive-hook-0.12-new-commits-from-all-branches.py] - example that adds to Trac all commits, ensuring that every commit is added only once. You will also need to change your trac.ini file accordingly. Thus repository_sync_per_request under the trac section is to be unset, and tracopt.ticket.commit_updater.* under component are to be set to enabled. e.g. : {{{ [trac] repository_dir = /path/to/git/repos.git/ repository_sync_per_request = ... [components] tracext.git.* = enabled tracopt.ticket.commit_updater.committicketreferencemacro = enabled tracopt.ticket.commit_updater.committicketupdater = enabled ... }}} Also make sure that the user executing the trac-admin command has read access to your TRAC_ENV and write access to your trac.log as well as to your trac database. == Troubleshooting == '''/!\ NOTES ''': - the `Test.git` in the configuration section 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. - Wrong permissions may also be the cause of the error `!GitError: GIT control files not found, maybe wrong directory?`. Make sure the `repository_dir` argument is accessible via `git` by the `tracd` process. - If you are noticing a '''slow down in trac''' with a repository above 500 commits, try disabling the caching. It seems to bog things down as a repo grows. - 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 }}} - If on Trac 0.12 you don't see the shortrev and commit branch, you probably have caching enabled (cached_repository = true, persistent_cache = true). Set those to false. == Recent Changes == See [http://github.com/hvr/trac-git-plugin/commits Commit History @ GitHub] == Author/Contributors == '''Author:''' [wiki:hvr Herbert Valerio Riedel] [[BR]] '''Contributors:''' Hans Petter Jansson