## Frequently Asked Questions

### Git:Blit?  What kind of name is that?
Its a phonetic play on [bitblt][bitblt] which is an image processing operation meaning *bit-block transfer*.

### Why use Git:Blit?
Its small.  Its portable.  Its easy to manage.

### Do I need real Git?
No.  Git:Blit is based on [JGit][jgit] which is a pure Java implementation of the [Git version control system][git].<br/>
Everything you need for Git:Blit is either in the zip distribution file or automatically downloaded on execution. 

### Does Git:Blit use a database to store its data?
No.  Git:Blit stores its repository configuration information within the `.git/config` file and its user information in `users.properties` or whatever filename is configured in `gitblit.properties`.

### I want to deploy Git:Blit into my own servlet container.  Where is the WAR?
At this time there is no WAR build available.

### Why doesn't Git:Blit support SSH?
Git:Blit could integrate [Apache Mina][mina] to provide SSH access.  However, doing so violates Git:Blit's first design principle: [KISS](http://en.wikipedia.org/wiki/KISS_principle).<br/>
SSH supports requires creating, exchanging, and managing SSH keys.  While this is doable, its not simple like JGit's SmartHTTP implementation.

You might consider running [Gerrit](http://gerrit.googlecode.org) which does integrate [Apache Mina][mina] and supports SSH or you might consider serving [Git][git] on Linux which would offer real SSH support and also allow use of [many other compelling Git solutions](https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools).

### What types of Search does Git:Blit support?
Git:Blit supports case-insensitive searches of *commit message* (default), *author*, and *committer*.<br/>

To search by *author* or *committer* use the following syntax in the search box:

    author: james
    committer: james
    
Alternatively, you could enable the search type dropdown list in your `gitblit.properties` file.

### How do I run Git:Blit on port 80 or 443 in Linux?
Linux requires root permissions to serve on ports < 1024.<br/>
Run the server as *root* (security concern) or change the ports you are serving to 8080 (http) or 8443 (https). 

[bitblt]: http://en.wikipedia.org/wiki/Bit_blit "Wikipedia Bitblt"
[jgit]: http://eclipse.org/jgit "Eclipse JGit Site"
[git]: http://git-scm.com "Official Git Site"
[mina]: http://mina.apache.org " Apache Mina"