## Release History

<div class="alert alert-error">
<h4>Update Note</h4>
If you are updating from an earlier release AND you have indexed branches with the Lucene indexing feature, you need to be aware that this release will completely re-index your repositories.  Please be sure to provide ample heap resources as appropriate for your installation.
</div>

### Current Release

**%VERSION%** ([go](http://code.google.com/p/gitblit/downloads/detail?name=%GO%) | [war](http://code.google.com/p/gitblit/downloads/detail?name=%WAR%) | [express](http://code.google.com/p/gitblit/downloads/detail?name=%EXPRESS%) | [fedclient](http://code.google.com/p/gitblit/downloads/detail?name=%FEDCLIENT%) | [manager](http://code.google.com/p/gitblit/downloads/detail?name=%MANAGER%) | [api](http://code.google.com/p/gitblit/downloads/detail?name=%API%)) based on [%JGIT%][jgit] &nbsp; *released %BUILDDATE%*

#### fixes

- Fixed bug in the diff view for filenames that have non-ASCII characters (issue 128)

#### additions

- added RedmineUserService (github/mallowlabs)

#### changes

- Emit a warning in the log file if running on a Tomcat-based servlet container which is unfriendly to %2F forward-slash url encoding AND Gitblit is configured to mount parameters with %2F forward-slash url encoding (Github/jpyeron, issue 126)
- LDAP admin attribute setting is now consistent with LDAP teams setting and admin teams list.  
If *realm.ldap.maintainTeams==true* **AND** *realm.ldap.admins* is not empty, then User.canAdmin() is controlled by LDAP administrative team membership.  Otherwise, User.canAdmin() is controlled by Gitblit.

#### dependency changes

- updated to Jetty 7.6.5

<hr/>

### Older Releases

**1.1.0** *released 2012-08-25*

#### fixes

- Bypass Wicket's inability to handle direct url addressing of a view-restricted, grouped repository for new, unauthenticated sessions (e.g. click link from email or rss feed without having an active Wicket session)
- Fixed MailExecutor's failure to cope with mail server connection troubles resulting in 100% CPU usage
- Fixed generated urls in Groovy *sendmail* hook script for grouped repositories
- Fixed generated urls in RSS feeds for grouped repositories
- Fixed nullpointer exception in git servlet security filter (issue 123)
- Eliminated an unnecessary repository enumeration call on the root page which should result in faster page loads (issue 103) 
- Gitblit could not delete a Lucene index in a working copy on index upgrade 
- Do not index submodule links (issue 119)
- Restore original user or team object on failure to update (issue 118)
- Fixes to relative path determination in repository search algorithm for symlinks (issue 116)
- Fix to GitServlet to allow pushing to symlinked repositories (issue 116)
- Repository URL now uses `X-Forwarded-Proto` and `X-Forwarded-Port`, if available, for reverse proxy configurations (issue 115)
- Output real RAW content, not simulated RAW content (issue 114)
- Fixed Lucene charset encoding bug when reindexing a repository (issue 112)
- Fixed search box linking to Lucene page for grouped repository on Tomcat (issue 111)
- Fixed null pointer in LdapUserSerivce if account has a null email address (issue 110)
- Really fixed failure to update a GO setting from the manager (issue 85)

#### additions

- Identified repository list is now cached by default to reduce disk io and to improve performance (issue 103)  
    **New:** *git.cacheRepositoryList=true*
- Preliminary bare repository submodule support  
    **New:** *git.submoduleUrlPatterns=*
    - *git.submoduleUrlPatterns* is a space-delimited list of regular expressions for extracting a repository name from a submodule url.  
    For example, `git.submoduleUrlPatterns = .*?://github.com/(.*)` would extract *gitblit/gitblit.git* from *git://github.git/gitblit/gitblit.git*  
    **Note:** You may not need this control to work with submodules, but it is there if you do.
    - If there are no matches from *git.submoduleUrlPatterns* then the repository name is assumed to be whatever comes after the last `/` character *(e.g. gitblit.git)*
    - Gitblit will try to locate this repository relative to the current repository *(e.g. myfolder/myrepo.git, myfolder/mysubmodule.git)* and then at the root level *(mysubmodule.git)* if that fails.
    - Submodule references in a working copy will be properly identified as gitlinks, but Gitblit will not traverse into the working copy submodule repository.
- Added a repository setting to control authorization as AUTHENTICATED or NAMED. (issue 117)  
NAMED is the original behavior for authorizing against a list of permitted users or permitted teams.  
AUTHENTICATED allows restricted access for any authenticated user.  This is a looser authorization control.
- Added default authorization control setting (AUTHENTICATED or NAMED)  
    **New:** *git.defaultAuthorizationControl=NAMED*  
- Added setting to control how deep Gitblit will recurse into *git.repositoriesFolder* looking for repositories (issue 103)  
    **New:** *git.searchRecursionDepth=-1*  
- Added setting to specify regex exclusions for repositories (issue 103)  
    **New:** *git.searchExclusions=*  
- Blob page now supports displaying images (issue 6)
- Non-image binary files can now be downloaded using the RAW link
- Support StartTLS in LdapUserService (Steffen Gebert, issue 122)
- Added Korean translation

#### changes

- Line breaks inserted for readability in raw Markdown content display in the event of a parsing/transformation error.  An error message is now displayed prepended to the raw content.
- Improve UTF-8 reading for Markdown files
- Updated Polish translation
- Updated Japanese translation
- Updated Spanish translation

<hr/>

**1.0.0** *released 2012-07-14*

#### fixes

- Fixed bug in Lucene search where old/stale blobs were never properly deleted during incremental updates.  This resulted in duplicate blob entries in the index.
- Fixed intermittent bug in identifying line numbers in Lucene search (issue 105)
- Adjust repository identification algorithm to handle the scenario where a repository name collides with a group/folder name (e.g. foo.git and foo/bar.git) (issue 104)
- Fixed bug where a repository set as *authenticated push* did not have anonymous clone access (issue 96)
- Fixed bug in Basic authentication if passwords had a colon (Github/peterloron)
- Fixed bug where the Gitblit Manager could not update a setting that was not referenced in reference.properties (issue 85)

#### changes

- **Updated Lucene index version which will force a rebuild of ALL your Lucene indexes**  
Make sure to properly set *web.blobEncodings* before starting Gitblit if you are updating!  (issue 97)
- Changed default layout for web ui from Fixed-Width layout to Responsive layout (issue 101)  
- IUserService interface has changed to better accomodate custom authentication and/or custom authorization  
    The default `users.conf` now supports persisting display names and email addresses. 
- Updated Japanese translation (Github/zakki)

#### additions

- Added setting to allow specification of a robots.txt file (issue 99)  
    **New:** *web.robots.txt =*  
- Added setting to control Responsive layout or Fixed-Width layout (issue 101)  
    Responsive layout is now the default.  This layout gracefully scales the web ui from a desktop layout to a mobile layout by hiding page components.  It is easy to try, just resize your browser or point your Android/iOS device to the url of your Gitblit install.  
    **New:** *web.useResponsiveLayout = true*  
- Added setting to control charsets for blob string decoding.  Default encodings are UTF-8, ISO-8859-1, and server's default charset. (issue 97)  
    **New:** *web.blobEncodings = UTF-8 ISO-8859-1*  
- Exposed JGit's internal configuration settings in gitblit.properties/web.xml (issue 93)  
    Review your `gitblit.properties` or `web.xml` for detailed explanations of these settings.  
    **New:** *git.packedGitWindowSize = 8k*  
    **New:** *git.packedGitLimit = 10m*  
    **New:** *git.deltaBaseCacheLimit = 10m*  
    **New:** *git.packedGitOpenFiles = 128*  
    **New:** *git.streamFileThreshold = 50m*  
    **New:** *git.packedGitMmap = false*  
- Added default access restriction.  Applies to new repositories and repositories that have not been configured with Gitblit. (issue 88)  
    **New:** *git.defaultAccessRestriction = NONE*  
- Added Ivy 2.2.0 dependency which enables Groovy Grapes, a mechanism to resolve and retrieve library dependencies from a Maven 2 repository within a Groovy push hook script 
- Added setting to control Groovy Grape root folder (location where resolved dependencies are stored)   
    [Grape](http://groovy.codehaus.org/Grape) allows you to add Maven dependencies to your pre-/post-receive hook script classpath.  
    **New:** *groovy.grapeFolder = groovy/grape*  
- Added LDAP User Service with many new *realm.ldap* keys (Github/jcrygier)
- Added support for custom repository properties for Groovy hooks (Github/jcrygier)  
    Custom repository properties complement hook scripts by providing text field prompts in the web ui and the Gitblit Manager for the defined properties.  This allows your push hooks to be parameterized.
- Added script to facilitate proxy environment setup on Linux (Github/mragab)
- Added Polish translation (Lukasz Jader)
- Added Spanish translation (Eduardo Guervos Narvaez)

#### dependency changes

- updated to Bootstrap 2.0.4
- updated to JGit 2.0.0.201206130900-r
- updated to Groovy 1.8.6
- updated to Gson 1.7.2
- updated to Log4J 1.2.17
- updated to SLF4J 1.6.6
- updated to Apache Commons Daemon 1.0.10
- added Ivy 2.2.0

<hr/>

**0.9.3** *released 2012-04-11*

#### fixes

- Fixed bug where you could not remove all selections from a RepositoryModel list (permitted users, permitted teams, hook scripts, federation sets, etc) (issue 81)
- Automatically set *java.awt.headless=true* for Gitblit GO

<hr/>

**0.9.2** *released 2012-04-04*

#### changes

- Added *clientLogger* bound variable to Groovy hook mechanism to allow custom info and error messages to be returned to the client (Github/jcrygier)

#### fixes

- Fixed absolute path/canonical path discrepancy between Gitblit and JGit regarding use of symlinks (issue 78)
- Fixed row layout on activity page (issue 79)
- Fixed Centos service script (Github/mohamedmansour)
- Fixed EditRepositoryPage for IE8; missing save button (issue 80, Github/jonnybbb)

<hr/>

**0.9.1** *released 2012-03-27*

#### fixes

- Lucene folder was stored in working copy instead of in .git folder

<hr/>

**0.9.0** *released 2012-03-27*

#### security

- Fixed session fixation vulnerability where the session identifier was not reset during the login process (issue 62)

#### changes

- Reject pushes to a repository with a working copy (i.e. non-bare repository) (issue-49)
- Changed default web.datetimestampLongFormat from *EEEE, MMMM d, yyyy h:mm a z* to *EEEE, MMMM d, yyyy HH:mm Z* (issue 50)
- Expanded commit age coloring from 2 days to 30 days (issue 57)

#### additions

- Added optional Lucene branch indexing (issue 16)  
    **New:** *web.allowLuceneIndexing = true*  
    **New:** *web.luceneIgnoreExtensions = 7z arc arj bin bmp dll doc docx exe gif gz jar jpg lib lzh odg odf odt pdf ppt png so swf xcf xls xlsx zip*  
Repository branches may be optionally indexed by Lucene for improved searching.  To use this feature you must specify which branches to index within the *Edit Repository* page; _no repositories are automatically indexed_.  Gitblit will build or incrementally update enrolled repositories on a 2 minute cycle. (i.e you will have to wait 2-3 minutes after respecifying indexed branches or pushing new commits before Gitblit will build/update the repository's Lucene index.)  
If a repository has Lucene-indexed branches the *search* form on the repository pages will redirect to the root-level Lucene search page and only the content of those branches can be searched.  
If the repository does not specify any indexed branches then repository commit-traversal search is used.    
**Note:** Initial indexing of an existing repository can be memory-exhaustive. Be sure to provide your Gitblit server adequate heap space to index your repositories (e.g. -Xmx1024M).  
See the [setup](setup.html) page for additional details.
- Allow specifying timezone to use for Gitblit which is independent of both the JVM and the system timezone (issue 54)  
    **New:** *web.timezone =*  
- Added a built-in AJP connector for integrating Gitblit GO into an Apache mod_proxy setup (issue 59)  
    **New:** *server.ajpPort = 0*  
    **New:** *server.ajpBindInterface = localhost*
- On the Repositories page show a bang *!* character in the color swatch of a repository with a working copy (issue 49)  
Push requests to these repositories will be rejected.
- On all non-bare Repository pages show *WORKING COPY* in the upper right corner (issue 49)
- New setting to prevent display/serving non-bare repositories  
    **New:** *git.onlyAccessBareRepositories = false*
- Added *protect-refs.groovy* (Github/plm) 
- Allow setting default branch (relinking HEAD) to a branch or a tag (Github/plm)
- Added Ubuntu service init script (issue 72)
- Added partial Japanese translation (Github/zakki)

#### fixes 

- Ensure that Welcome message is parsed using UTF-8 encoding (issue 74) 
- Activity page chart layout broken by Google (issue 73)
- Uppercase repositories not selectable in edit palettes (issue 71)
- Not all git notes were properly displayed on the commit page (issue 70)
- Activity page now displays all local branches (issue 65)
- Fixed (harmless) nullpointer on pushing to an empty repository (issue 69)
- Fixed possible nullpointer from the servlet container on startup (issue 67)
- Fixed UTF-8 encoding bug on diff page (issue 66)
- Fixed timezone bugs on the activity page (issue 54)
- Prevent add/edit team with no selected repositories (issue 56) 
- Disallow browser autocomplete on add/edit user/team/repository pages
- Fixed username case-sensitivity issues (issue 43)
- Disregard searching a subfolder if Gitblit does not have filesystem permissions (Github/lemval issue 51)

#### dependency changes

- updated to Bootstrap 2.0.2
- added GLYPHICONS (as bundled with Bootstrap 2.0.2)
- updated to MarkdownPapers 1.2.7
- updated to JGit 1.3.0.201202151440-r
- updated to Wicket 1.4.20

<hr/>

**0.8.2** ([go](http://code.google.com/p/gitblit/downloads/detail?name=gitblit-0.8.2.zip) | [war](http://code.google.com/p/gitblit/downloads/detail?name=gitblit-0.8.2.war) | [express](http://code.google.com/p/gitblit/downloads/detail?name=express-0.8.2.zip) | [fedclient](http://code.google.com/p/gitblit/downloads/detail?name=fedclient-0.8.2.zip) | [manager](http://code.google.com/p/gitblit/downloads/detail?name=manager-0.8.2.zip) | [api](http://code.google.com/p/gitblit/downloads/detail?name=gbapi-0.8.2.zip)) based on [JGit 1.2.0 (201112221803-r)][jgit] &nbsp; *released 2012-01-13*

#### fixes

- Fixed bug when upgrading from users.properties to users.conf (issue 41)

<hr/>

**0.8.1** &nbsp; *released 2012-01-11*

#### fixes

- Include missing icon resource for the manager (issue 40)
- Fixed sendmail.groovy message content with incorrect tag/branch labels

<hr/>

**0.8.0** &nbsp; *released 2012-01-11*

#### additions

- Platform-independent, Groovy push hook script mechanism.  
Hook scripts can be set per-repository, per-team, or globally for all repositories.  
    **New:** *groovy.scriptsFolder = groovy*  
    **New:** *groovy.preReceiveScripts =*  
    **New:** *groovy.postReceiveScripts =*
- *sendmail.groovy* for optional email notifications on push.  
You must properly configure your SMTP server settings in `gitblit.properties` or `web.xml` to use *sendmail.groovy*.
- New global key for mailing lists.  This is used in conjunction with the *sendmail.groovy* hook script.  All repositories that use the *sendmail.groovy* script will include these addresses in the notification process.  Please see the Setup page for more details about configuring sendmail.  
    **New:** *mail.mailingLists =*
- *com.gitblit.GitblitUserService*.  This is a wrapper object for the built-in user service implementations.  For those wanting to only implement custom authentication it is recommended to subclass GitblitUserService and override the appropriate methods.  Going forward, this will help insulate custom authentication from new IUserService API and/or changes in model classes.
- New default user service implementation: *com.gitblit.ConfigUserService* (`users.conf`)  
This user service implementation allows for serialization and deserialization of more sophisticated Gitblit User objects without requiring the encoding trickery now present in FileUserService (users.properties).  This will open the door for more advanced Gitblit features.  
For those upgrading from an earlier Gitblit version, a `users.conf` file will automatically be created for you from your existing `users.properties` file on your first launch of Gitblit <u>however</u> you will have to manually set *realm.userService=users.conf* to switch to the new user service.  
The original `users.properties` file and it's corresponding implementation are **deprecated**.  
    **New:** *realm.userService = users.conf*
- Teams for specifying user-repository access in bulk.  Teams may also specify mailing lists addresses and pre- & post- receive hook scripts.
- Gravatar integration  
    **New:** *web.allowGravatar = true*   
- Activity page for aggregated repository activity.  This is a timeline of commit activity over the last N days for one or more repositories.  
   **New:** *web.activityDuration = 14*  
   **New:** *web.timeFormat = HH:mm*  
   **New:** *web.datestampLongFormat = EEEE, MMMM d, yyyy*  
- *Filters* menu for the Repositories page and Activity page.  You can filter by federation set, team, and simple custom regular expressions.  Custom expressions can be stored in `gitblit.properties` or `web.xml` or directly defined in your url (issue 27)  
   **New:** *web.customFilters=*
- Flash-based 1-step *copy to clipboard* of the primary repository url based on Clippy  
   **New:** *web.allowFlashCopyToClipboard = true*
- JavaScript-based 3-step (click, ctrl+c, enter) *copy to clipboard* of the primary repository url in the event that you do not want to use Flash on your installation
- Empty repositories now link to an *empty repository* page which gives some direction to the user for the next step in using Gitblit.  This page displays the primary push/clone url of the repository and gives sample syntax for the git command-line client. (issue 31)
- Repositories with a *gh-pages* branch will now have a *pages* link which will serve the content of this branch.  All resource requests are against the repository, Gitblit does not checkout/export this branch to a temporary filesystem.  Jekyll templating is not supported.
- Gitblit Express bundle to get started running Gitblit on RedHat's OpenShift cloud <span class="label label-warning">BETA</span>

#### changes

- Dropped display of trailing .git from repository names
- Gitblit GO is now monolithic like the WAR build. (issue 30)  
This change helps adoption of GO in environments without an internet connection or with a restricted connection.
- Unit testing framework has been migrated to JUnit4 syntax and the test suite has been redesigned to run all unit tests, including rpc, federation, and git push/clone tests

#### fixes

- Several a bugs in FileUserService related to cleaning up old repository permissions on a rename or delete
- Renaming a repository into a new subfolder failed (issue 33)

#### dependency changes

- updated to JGit 1.2.0
- added Groovy 1.8.5 
- added Clippy (bundled)

<hr/>

**0.7.0** &nbsp; *released 2011-11-11*

- **security**: fixed security hole when cloning clone-restricted repository with TortoiseGit (issue 28)
- improved: updated ui with Twitter's Bootstrap CSS toolkit  
    **New:** *web.loginMessage = gitblit*
- improved: repositories list performance by caching repository sizes (issue 27)
- improved: summary page performance by caching metric calculations (issue 25)
- added: authenticated JSON RPC mechanism   
    **New:** *web.enableRpcServlet = true*  
    **New:** *web.enableRpcManagement = false*  
    **New:** *web.enableRpcAdministration = false*
- added: Gitblit API RSS/JSON RPC library
- added: Gitblit Manager (Java/Swing Application) for remote administration of a Gitblit server.
- added: per-repository setting to skip size calculation (faster repositories page loading)
- added: per-repository setting to skip summary metrics calculation (faster summary page loading)
- added: IUserService.setup(IStoredSettings) for custom user service implementations
- added: setting to control Gitblit GO context path for proxy setups *(Github/trygvis)*  
    **New:** *server.contextPath = /*
- added: *combined-md5* password storage option which stores the hash of username+password as the password *(Github/alyandon)*
- added: repository owners are automatically granted access for git, feeds, and zip downloads without explicitly selecting them *(Github/dadalar)*
- added: RSS feeds now include regex substitutions on commit messages for bug trackers, etc
- fixed: federation protocol timestamps.  dates are now serialized to the [iso8601](http://en.wikipedia.org/wiki/ISO_8601) standard.  
    **This breaks 0.6.0 federation clients/servers.**
- fixed: collision on rename for repositories and users
- fixed: Gitblit can now browse the Linux kernel repository (issue 25)
- fixed: Gitblit now runs on Servlet 3.0 webservers (e.g. Tomcat 7, Jetty 8) (issue 23)
- fixed: Set the RSS content type of syndication feeds for Firefox 4 (issue 22)
- fixed: RSS feeds are now properly encoded to UTF-8
- fixed: RSS feeds now properly generate parameterized links if *web.mountParameters=false*
- fixed: Null pointer exception if did not set federation strategy (issue 20)
- fixed: Gitblit GO allows SSL renegotiation if running on Java 1.6.0_22 or later
- updated: MarkdownPapers 1.2.5
- updated: Wicket 1.4.19

<hr/>

**0.6.0** &nbsp; *released 2011-09-27*

- added: federation feature to allow gitblit instances (or gitblit federation clients) to pull repositories and, optionally, settings and accounts from other gitblit instances.  This is something like [svn-sync](http://svnbook.red-bean.com/en/1.5/svn.ref.svnsync.html) for gitblit.  
    **New:** *federation.name =*  
    **New:** *federation.passphrase =*  
    **New:** *federation.allowProposals = false*  
    **New:** *federation.proposalsFolder = proposals*  
    **New:** *federation.defaultFrequency = 60 mins*  
    **New:** *federation.sets =*  
    **New:** *mail.* settings for sending emails  
    **New:** user role *#notfederated* to prevent a user account from being pulled by a federated Gitblit instance  
- added: google-gson dependency
- added: javamail dependency
- updated: MarkdownPapers 1.1.1
- updated: Wicket 1.4.18
- updated: JGit 1.1.0
- fixed: syndication urls for WAR deployments
- fixed: authentication for zip downloads

<hr/>

**0.5.2** &nbsp; *released 2011-07-27*

- fixed: active repositories with a HEAD that pointed to an empty branch caused internal errors (issue 14)
- fixed: bare-cloned repositories were listed as (empty) and were not clickable (issue 13)
- fixed: default port for Gitblit GO is now 8443 to be more linux/os x friendly (issue 12)
- fixed: repositories can now be reliably deleted and renamed (issue 10)
- fixed: users can now change their passwords (issue 1)
- fixed: always show root repository group first, i.e. don't sort root group with other groups
- fixed: tone-down repository group header color
- added: optionally display repository on-disk size on repositories page  
    **New:** *web.showRepositorySizes = true*
- added: forward-slashes ('/', %2F) can be encoded using a custom character to workaround some servlet container default security measures for proxy servers  
    **New:** *web.forwardSlashCharacter = /*
- updated: MarkdownPapers 1.1.0
- updated: Jetty 7.4.3

<hr/>

**0.5.1** &nbsp; *released 2011-06-28*

- clarified SSL certificate generation and configuration for both server-side and client-side
- added some more troubleshooting information to documentation
- replaced JavaService with Apache Commons Daemon

<hr/>

**0.5.0** &nbsp; *released 2011-06-26*

- initial release

[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"
