<div class="well" style="margin-left:5px;float:right;width:275px;padding: 10px 10px;">
<script>
   (function(d, s, id) {
       var js, fjs = d.getElementsByTagName(s)[0];
       if (d.getElementById(id)) return;
       js = d.createElement(s); js.id = id;
       js.async = true;
       js.src = "//go.jelastic.com/widgets.js";
       fjs.parentNode.insertBefore(js, fjs);
   }(document, 'script', 'jelastic-jssdk'));
</script>
<div style="text-align:center">
<b>Current Release ${project.releaseVersion} (${project.releaseDate})</b><br/><a href="releasenotes.html">release notes</a>
<div style="padding:5px;"><a style="width:175px;text-decoration:none;" class="btn btn-success" href="%GCURL%gitblit-${project.releaseVersion}.zip">Download Gitblit GO (Windows)</a></div>
<div style="padding:5px;"><a style="width:175px;text-decoration:none;" class="btn btn-success" href="%GCURL%gitblit-${project.releaseVersion}.tar.gz">Download Gitblit GO (Linux/OSX)</a></div>
<div style="padding:5px;"><a style="width:175px;text-decoration:none;" class="btn btn-danger" href="%GCURL%gitblit-${project.releaseVersion}.war">Download Gitblit WAR</a></div>
<div style="padding:5px;"><a style="width:175px;text-decoration:none;" class="btn btn-primary" href="%GCURL%manager-${project.releaseVersion}.zip">Download Gitblit Manager</a></div>
		<a href='https://bintray.com/gitblit/releases/gitblit/view?source=watch' alt='Get automatic notifications about new "stable" versions'><img src='https://www.bintray.com/docs/images/bintray_badge_color.png'></a>
	</div>
<div data-manifest="http://1c57d83a4c5f3a21ec25c050d4c5e37b.app.jelastic.com/xssu/cross/download/RDYYHABkAFJbUVlMMVU7RUtDARgATExFCEBuGS4jdQJKRUsEDwIBQmNTTEBI" data-width="280" data-theme="flat-blue" data-text="Get it hosted now!" data-tx-empty="Type your email and click the button" data-tx-invalid-email="Invalid email, please check the spelling" data-tx-error="An error has occurred, please try again later" data-tx-success="Check your email" class="je-app" ></div>
	<div style="padding-top:5px;">
	<table class="table condensed-table">
		<tbody>
		<tr><th>License</th><td><a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a></td></tr>
		<tr><th>Sources</th><td><a href="${project.scmUrl}">GitHub</a></td></tr>		
		<tr><th>Issues</th><td><a href="${project.issuesUrl}">GitHub</a></td></tr>
		<tr><th>Discussion</th><td><a href="${project.forumUrl}">Gitblit Group</a></td></tr>
		<tr><th>Ohloh</th><td><a target="_top" href="http://www.ohloh.net/p/gitblit"><img border="0" width="100" height="16" src="http://www.ohloh.net/p/gitblit/widgets/project_thin_badge.gif" alt="Ohloh project report for Gitblit" /></a></td></tr>
		</tbody>
		</table>
	</div>
</div>

## What is Gitblit?

Gitblit is an open-source, pure Java stack for managing, viewing, and serving [Git][git] repositories.  
It's designed primarily as a tool for small workgroups who want to host centralized repositories.

### GO: Single-Stack Solution

*Gitblit GO* is an integrated, single-stack solution based on Jetty.

You do not need Apache httpd, Perl, Git, or Gitweb.  Should you want to use some or all of those, you still can; Gitblit plays nice with the other kids on the block.

This is what you should download if you want to go from zero to Git in less than 5 mins.

### WAR: For Your Servlet Container
*Gitblit WAR* is what you should download if you already have a servlet container available that you wish to use.  Jetty 6/7/8 and Tomcat 6/7 are known to work.  Generally, any Servlet 2.5 or Servlet 3.0 container should work.

### You decide how to use Gitblit

Gitblit can be used as a dumb repository viewer with no administrative controls or user accounts.  
Gitblit can be used as a complete Git stack for cloning, pushing, and repository access control.  
Gitblit can be used without any other Git tooling (including actual Git) or it can cooperate with your established tools.

### All Transports

The SSH, HTTP, & GIT protocols are supported and ready-to-go out of the box.

### Issue tracking with branch-based pull requests

Gitblit blends elements of GitHub, BitBucket, and Gerrit to provide a streamlined collaboration workflow based on branches within the primary repository.

### Easy Remote Management

Administrators can create and manage all repositories, user accounts, and teams from the *Web UI*.  
Administrators can create and manage all repositories, user accounts, and teams from the *JSON RPC interface* using the [Gitblit Manager](%GCURL%manager-${project.releaseVersion}.zip) or your own custom tooling. 
Administrators can create and manage all repositories, user accounts, and teams from the *command-line* using SSH & the [Powertools plugin](https://github.com/gitblit/gitblit-powertools-plugin).

### Integration with Your Infrastructure

- Extendable by plugins
- Groovy push hook scripts
- Pluggable user service mechanism
    - LDAP authentication with optional LDAP-controlled Team memberships
    - Redmine authentication
    - SalesForce.com authentication
    - Windows authentication
    - PAM authentication
    - Custom authentication, authorization, and user management
- Rich RSS feeds
- JSON-based RPC mechanism
- Java Client RSS/JSON API library for custom integration

### Backup Strategy

Gitblit includes a backup mechanism (*federation*) which can be used to backup repositories and, optionally, user accounts, team definitions, server settings, & Groovy push hook scripts from your Gitblit instance to another Gitblit instance or to a [Gitblit Federation Client](%GCURL%fedclient-${project.releaseVersion}.zip).  Similarly, you can use the federation mechanism to aggregate individual workspace Gitblit instances to a common, centralized server.

### Java Runtime Requirement

Gitblit requires a Java 7 Runtime Environment (JRE) or a Java 7 Development Kit (JDK).

[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"
[git]: http://git-scm.com "Official Git Site"
