James Moger
2012-01-31 78dc06a87f82ed19e3eebe1f16dc6c1bdaf5fbc5
commit | author | age
85c2e6 1 ## Gitblit WAR Setup
dd7961 2
3b5289 3 1. Download [Gitblit WAR %VERSION%](http://code.google.com/p/gitblit/downloads/detail?name=%WAR%) to the webapps folder of your servlet container.  
d39680 4 2. You may have to manually extract the WAR (zip file) to a folder within your webapps folder.
93f472 5 3. Copy the `WEB-INF/users.conf` file to a location outside the webapps folder that is accessible by your servlet container.  
fa54be 6 Optionally copy the example hook scripts in `WEB-INF/groovy` to a location outside the webapps folder that is accesible by your servlet container.
3b5289 7 4. The Gitblit webapp is configured through its `web.xml` file.  
85c2e6 8 Open `web.xml` in your favorite text editor and make sure to review and set:
JM 9     - <context-parameter> *git.repositoryFolder* (set the full path to your repositories folder)
fa54be 10     - <context-parameter> *groovy.scriptsFolder* (set the full path to your Groovy hook scripts folder)
93f472 11     - <context-parameter> *realm.userService* (set the full path to `users.conf`)
85c2e6 12 5. You may have to restart your servlet container. 
JM 13 6. Open your browser to <http://localhost/gitblit> or whatever the url should be.
d4c908 14 7. Enter the default administrator credentials: **admin / admin** and click the *Login* button  
d39680 15     **NOTE:** Make sure to change the administrator username and/or password!! 
85c2e6 16
JM 17 ## Gitblit GO Setup
18
3b5289 19 1. Download and unzip [Gitblit GO %VERSION%](http://code.google.com/p/gitblit/downloads/detail?name=%GO%).  
85c2e6 20 *Its best to eliminate spaces in the path name.* 
3b5289 21 2. The server itself is configured through a simple text file.  
dd7961 22 Open `gitblit.properties` in your favorite text editor and make sure to review and set:
d39680 23     - *git.repositoryFolder* (path may be relative or absolute)
fa54be 24     - *groovy.scriptsFolder* (path may be relative or absolute)
d39680 25     - *server.tempFolder* (path may be relative or absolute)
831469 26     - *server.httpPort* and *server.httpsPort*
3b5289 27     - *server.httpBindInterface* and *server.httpsBindInterface*  
831469 28     **https** is strongly recommended because passwords are insecurely transmitted form your browser/git client using Basic authentication!
dd7961 29 3. Execute `gitblit.cmd` or `java -jar gitblit.jar` from a command-line
3b5289 30 4. Wait a minute or two while all dependencies are downloaded and your self-signed *localhost* certificate is generated.  
JM 31     Please see the section titled **Creating your own Self-Signed Certificate** to generate a certificate for *your hostname*.
230632 32 5. Open your browser to <http://localhost:8080> or <https://localhost:8443> depending on your chosen configuration.
d4c908 33 6. Enter the default administrator credentials: **admin / admin** and click the *Login* button    
d39680 34     **NOTE:** Make sure to change the administrator username and/or password!! 
85c2e6 35
JM 36 ### Creating your own Self-Signed Certificate
d39680 37 Gitblit GO automatically generates an ssl certificate for you that is bound to *localhost*.
85c2e6 38
9b72a2 39 Remote Eclipse/EGit/JGit clients (<= 1.1.0) will fail to communicate using this certificate because JGit always verifies the hostname of the certificate, regardless of the *http.sslVerify=false* client-side setting.
d39680 40
JM 41 The EGit failure message is something like:
42
43     Cannot get remote repository refs.
44     Reason: https:/myserver.com/git/myrepo.git: cannot open git-upload-pack
45
46 If you want to serve your repositories to another machine over https then you will want to generate your own certificate.
47
48 1. Review the contents of `makekeystore.cmd` or `makekeystore_jdk.cmd`
49 2. Set *your hostname* into the *HOSTNAME* variable.
50 3. Execute the script.<br/>This will generate a new certificate and keystore for *your hostname* protected by *server.storePassword*.
85c2e6 51  
3b5289 52 **NOTE:**  
JM 53 If you use `makekeystore_jdk.cmd`, the certificate password AND the keystore password must match and must be set as *server.storePassword* or specified with the *storePassword* command-line parameter!
d39680 54
JM 55 Additionally, if you want to change the value of *server.storePassword* (recommended) you will have to generate a new certificate afterwards.
85c2e6 56
JM 57 ### Running as a Windows Service
d39680 58 Gitblit uses [Apache Commons Daemon](http://commons.apache.org/daemon) to install and configure its Windows service.
JM 59
60 1. Review the contents of the `installService.cmd`
3b5289 61 2. Set the *ARCH* value as appropriate for your installed Java Virtual Machine.
d39680 62 3. Add any necessary *--StartParams* as enumerated below in **Command-Line Parameters**.
JM 63 4. Execute the script.
64
65 After service installation you can use the `gitblitw.exe` utility to control and modify the runtime settings of the service.<br/>
66 Additional service definition options and runtime capabilities of `gitblitw.exe` (prunmgr.exe) are documented [here](http://commons.apache.org/daemon/procrun.html).
67
68 **NOTE:**<br/>
69 If you change the name of the service from *gitblit* you must also change the name of `gitblitw.exe` to match the new service name otherwise the connection between the service and the utility is lost, at least to double-click execution. 
85c2e6 70
1c9219 71 #### VM Considerations
JM 72 By default, the service installation script configures your Windows service to use your default JVM.  This setup usually defaults to a client VM.<br/>
73 If you have installed a JDK, you might consider using the `gitblitw.exe` utility to manually specify the *server* VM.
74
75 1. Execute `gitblitw.exe`
76 2. On the *Java* tab uncheck *Use default*.
77 3. Manually navigate your filesystem and specify the server VM with the `...` button<br/><pre>
3b5289 78 Java Virtual Machine:
JM 79 C:\Program Files\Java\jre6\bin\server\jvm.dll</pre>
1c9219 80
85c2e6 81 #### Command-Line Parameters
JM 82 Command-Line parameters override the values in `gitblit.properties` at runtime.
83
84     --repositoriesFolder   Git Repositories Folder
85     --userService          Authentication and Authorization Service (filename or fully qualified classname)
86     --useNio               Use NIO Connector else use Socket Connector.
87     --httpPort             HTTP port for to serve. (port <= 0 will disable this connector)
88     --httpsPort            HTTPS port to serve.  (port <= 0 will disable this connector)
89     --storePassword        Password for SSL (https) keystore.
90     --shutdownPort         Port for Shutdown Monitor to listen on. (port <= 0 will disable this monitor)
91     --tempFolder           Folder for server to extract built-in webapp
92     
93 **Example**
94
93f472 95     java -jar gitblit.jar --userService c:\myrealm.config --storePassword something
790c38 96
JM 97 ## Upgrading Gitblit
98 Generally, upgrading is easy.
99
93f472 100 Since Gitblit does not use a database the only files you have to worry about are your configuration file (`gitblit.properties` or `web.xml`) and possibly your `users.conf` or `users.properties` file.
790c38 101
JM 102 Any important changes to the setting keys or default values will always be mentioned in the [release log](releases.html).
103
93f472 104 Gitblit v0.8.0 introduced a new default user service implementation which serializes and deserializes user objects into `users.conf`.  A `users.conf` file will be automatically created from an existing `users.properties` file on the first launch after an upgrade.  To use the `users.conf` service, *realm.userService=users.conf* must be set.  This revised user service allows for more sophisticated Gitblit user objects and will facilitate the development of more advanced features without adding the complexity of an embedded SQL database.
JM 105
106 `users.properties` and its user service implementation are deprecated as of v0.8.0.
107
790c38 108 ### Upgrading Gitblit WAR
93f472 109 1. Backup your `web.xml` file  
JM 110 Backup your `web.properties` file (if you have one, these are the setting overrides from using the RPC administration service)
790c38 111 2. Delete currently deployed gitblit WAR
JM 112 3. Deploy new WAR and overwrite the `web.xml` file with your backup
113 4. Review and optionally apply any new settings as indicated in the [release log](releases.html). 
114  
115 ### Upgrading Gitblit GO
116  
117 1. Backup your `gitblit.properties` file
93f472 118 2. Backup your `users.properties` file *(if it is located in the Gitblit GO folder)*  
JM 119 OR  
120 Backup your `users.conf` file *(if it is located in the Gitblit GO folder)*
fa54be 121 3. Backup your Groovy hook scripts
JM 122 4. Unzip Gitblit GO to a new folder
123 5. Overwrite the `gitblit.properties` file with your backup
124 6. Overwrite the `users.properties` file with your backup *(if it was located in the Gitblit GO folder)*  
93f472 125 OR  
JM 126 Overwrite the `users.conf` file with your backup *(if it was located in the Gitblit GO folder)*
fa54be 127 7. Review and optionally apply any new settings as indicated in the [release log](releases.html).
790c38 128
JM 129 #### Upgrading Windows Service
3b5289 130 You may need to delete your old service definition and install a new one depending on what has changed in the release.
JM 131
85c2e6 132 ## Gitblit Configuration
dd7961 133
JM 134 ### Administering Repositories
00afd7 135 Repositories can be created, edited, renamed, and deleted through the web UI.  They may also be created, edited, and deleted from the command-line using real [Git](http://git-scm.com) or your favorite file manager and text editor.
dd7961 136
JM 137 All repository settings are stored within the repository `.git/config` file under the *gitblit* section.
138
139     [gitblit]
140         description = master repository
00afd7 141         owner = james
dd7961 142         useTickets = false
JM 143         useDocs = true
144         showRemoteBranches = false
145         accessRestriction = clone
00afd7 146         isFrozen = false
a1ea87 147         showReadme = false
f6740d 148         federationStrategy = FEDERATE_THIS
831469 149         isFederated = false
84c1d5 150         skipSizeCalculation = false
8f73a7 151         federationSets = 
3b5289 152
dd7961 153 #### Repository Names
a3bde6 154 Repository names must be unique and are CASE-SENSITIVE ON CASE-SENSITIVE FILESYSTEMS.  The name must be composed of letters, digits, or `/ _ - .`<br/>
dd7961 155 Whitespace is illegal.
JM 156
168566 157 Repositories can be grouped within subfolders.  e.g. *libraries/mycoollib.git* and *libraries/myotherlib.git*
a3bde6 158
85c2e6 159 All repositories created with Gitblit are *bare* and will automatically have *.git* appended to the name at creation time, if not already specified. 
a3bde6 160
00afd7 161 #### Repository Owner
JM 162 The *Repository Owner* has the special permission of being able to edit a repository through the web UI.  The Repository Owner is not permitted to rename the repository, delete the repository, or reassign ownership to another user.
163
fe24a0 164 ### Teams
JM 165
166 Since v0.8.0, Gitblit supports *teams* for the original `users.properties` user service and the current default user service `users.conf`.  Teams have assigned users and assigned repositories.  A user can be a member of multiple teams and a repository may belong to multiple teams.  This allows the administrator to quickly add a user to a team without having to keep track of all the appropriate repositories. 
167
168 ### Administering Users (users.conf, Gitblit v0.8.0+)
169 All users are stored in the `users.conf` file or in the file you specified in `gitblit.properties`. Your file extension must be *.conf* in order to use this user service.
170
93f472 171 The `users.conf` file uses a Git-style configuration format:
JM 172
173     [user "admin"]
174         password = admin
175         role = "#admin"
176         role = "#notfederated"
177         repository = repo1.git
178         repository = repo2.git
fe24a0 179         
JM 180     [user "hannibal"]
181         password = bossman
182
183     [user "faceman"]
184         password = vanity
185
186     [user "murdock"]
187         password = crazy        
188         
189     [user "babaracus"]
190         password = grrrr
191         
192     [team "ateam"]
193         user = hannibal
194         user = faceman
195         user = murdock
196         user = babaracus
197         repository = topsecret.git
0b9119 198         mailingList = list@ateam.org
d7905a 199         postReceiveScript = sendmail
93f472 200
JM 201 The `users.conf` file allows flexibility for adding new fields to a UserModel object that the original `users.properties` file does not afford without imposing the complexity of relying on an embedded SQL database. 
202
fe24a0 203 ### Administering Users (users.properties, Gitblit v0.5.0 - v0.7.0)
JM 204 All users are stored in the `users.properties` file or in the file you specified in `gitblit.properties`. Your file extension must be *.properties* in order to use this user service.
205
fa54be 206 The format of `users.properties` loosely follows Jetty's convention for HashRealms:
dd7961 207
fa54be 208     username=password,role1,role2,role3...
0b9119 209     @teamname=&mailinglist,!username1,!username2,!username3,repository1,repository2,repository3...
dd7961 210
JM 211 #### Usernames
3b5289 212 Usernames must be unique and are case-insensitive.  
dd7961 213 Whitespace is illegal.
JM 214
215 #### Passwords
486ee1 216 User passwords are CASE-SENSITIVE and may be *plain*, *md5*, or *combined-md5* formatted (see `gitblit.properties` -> *realm.passwordStorage*).
dd7961 217
JM 218 #### User Roles
831469 219 There are two actual *roles* in Gitblit: *#admin*, which grants administrative powers to that user, and *#notfederated*, which prevents an account from being pulled by another Gitblit instance.  Administrators automatically have access to all repositories.  All other *roles* are repository names.  If a repository is access-restricted, the user must have the repository's name within his/her roles to bypass the access restriction.  This is how users are granted access to a restricted repository.
dd7961 220
85c2e6 221 ## Authentication and Authorization Customization
eb96ea 222
0b9119 223 ### Customize Authentication Only
eb96ea 224 This is the simplest choice where you implement custom authentication and delegate all other standard user and team operations to one of Gitblit's user service implementations.  This choice insulates your customization from changes in User and Team model classes and additional API that may be added to IUserService.
JM 225
226 Please subclass [com.gitblit.GitblitUserService](https://github.com/gitblit/gitblit/blob/master/src/com/gitblit/GitblitUserService.java) and override the *setup()* and *authenticate()* methods.  
227 Make sure to set the *serviceImpl* field in your *setup()* method.
228
229 You may use your subclass by specifying its fully qualified classname in the *realm.userService* setting.
230
231 Your subclass must be on Gitblit's classpath and must have a public default constructor.  
232
0b9119 233 ### Customize Everything
93f472 234 Instead of maintaining a `users.conf` or `users.properties` file, you may want to integrate Gitblit into an existing environment.
dd7961 235
3b5289 236 You may use your own custom *com.gitblit.IUserService* implementation by specifying its fully qualified classname in the *realm.userService* setting.
dd7961 237
fe24a0 238 Your user service class must be on Gitblit's classpath and must have a public default constructor.  
JM 239 Please see the following interface definition [com.gitblit.IUserService](https://github.com/gitblit/gitblit/blob/master/src/com/gitblit/IUserService.java).
230632 240
fa54be 241 ## Groovy Hook Scripts
JM 242
243 *SINCE 0.8.0*
244
444101 245 Gitblit uses Groovy for its push hook mechanism.  This mechanism only executes when pushing to Gitblit, not when pushing to some other Git tooling in your stack.
fa54be 246
JM 247 The Groovy hook mechanism allows for dynamic extension of Gitblit to execute custom tasks on receiving and processing push events.  The scripts run within the context of your Gitblit instance and therefore have access to Gitblit's internals at runtime.
248
eb96ea 249 ### Rules, Requirements, & Behaviors
6cc1d4 250 1. Your Groovy scripts must be stored in the *groovy.scriptsFolder* as specified in `gitblit.properties` or `web.xml`.
JM 251 2. All script files must have the *.groovy* extension. Because of this you may omit the extension when specifying the script.
0b9119 252 3. Script filenames must not have spaces!
JM 253 4. Scripts must be explicitly specified to be executed, no scripts are *automatically* executed by name or extension.
254 5. A script can be specified to run on *all repositories* by adding the script file name to *groovy.preReceiveScripts* or *groovy.postReceiveScripts* in `gitblit.properties` or `web.xml`.
d7905a 255 6. Scripts can be specified for a team.
JM 256 7. Scripts may also be specified per-repository in the repository's settings.
257 8. Globally-specified scripts and team-specified scripts are excluded from the list of available scripts in a repository's settings 
258 9. Globally-specified scripts are executed first, in their listed order; followed by team-specified scripts in their listed order by alphabetical team order; followed by per-repository scripts, in their listed order.
259 10. A script may only be defined once in a pre-receive chain and once in a post-receive chain.  
6cc1d4 260 You may execute the same script on pre-receive and post-receive, just not multiple times within a pre-receive or post-receive event.
d7905a 261 11. Gitblit does not differentiate between what can be a pre-receive script and what can be a post-receive script.
JM 262 12. If a script *returns false* then the hook chain is aborted and none of the subsequent scripts will execute.
fa54be 263
eb96ea 264 Some sample scripts are included in the GO and WAR distributions to show you how you can tap into Gitblit with the provided bound variables.  Additional implementation details may be specified in the header comment of these examples.
JM 265
fa54be 266 Hook contributions and improvements are welcome.
JM 267
6cc1d4 268 ### Pre-Receive
JM 269
270 Pre-Receive scripts execute after the pushed objects have all been written to the Git repository but before the refs have been updated to point to these new objects.
271
272 This is the appropriate point to block a push and is how many Git tools implement branch-write permissions.
273
274 ### Post-Receive
275
276 Post-Receive scripts execute after all refs have been updated.
277
278 This is the appropriate point to trigger continuous integration builds or send email notifications, etc.
279
0b9119 280 ## Push Email Notifications
JM 281
282 Gitblit implements email notifications in *sendmail.groovy* which uses the Groovy Hook Script mechanism.  This allows for dynamic customization of the notification process at the installation site and serves as an example push script.
283
284 ### Enabling Push Notifications
285
286 In order to send email notifications on a push to Gitblit, this script must be specified somewhere in the *post-receive* script chain.  
e927f4 287 You may specify *sendmail* in one of three places:
0b9119 288
JM 289 1. *groovy.postReceiveScripts* in `gitblit.properties` or `web.xml`, globally applied to all repositories
e927f4 290 2. post-receive scripts of a Team definition
JM 291 3. post-receive scripts of a Repository definition
0b9119 292
JM 293 ### Destination Addresses
294
295 Gitblit does not currently support individual subscriptions to repositories; i.e. a *user* can not subscribe or unsubscribe from push notifications.
296
297 However, Repository Managers and Administrators can specify subscribed email addresses in one of three places:
298
299 1. *mail.mailingLists* in `gitblit.properties` or `web.xml`, globally applied to all push-notified repositories
300 2. mailing lists in a Team definition, applied to all repositories that are part of the team definition
301 3. mailing lists in a Repository definition
302
303 All three sources are checked and merged into a unique list of destination addresses for push notifications.
304
305 **NOTE:**  
306 Care should be taken when devising your notification scheme as it relates to any VIEW restricted repositories you might have.  Setting a global mailing list and activating push notifications for a VIEW restricted repository may send unwanted emails.
307
1f9dae 308 ## Client Setup and Configuration
JM 309 ### Https with Self-Signed Certificates
d39680 310 You must tell Git/JGit not to verify the self-signed certificate in order to perform any remote Git operations.
1f9dae 311
3b5289 312 **NOTE:**  
JM 313 The default self-signed certificate generated by Gitlbit GO is bound to *localhost*.  
314 If you are using Eclipse/EGit/JGit clients, you will have to generate your own certificate that specifies the exact hostname used in your clone/push url.  
9b72a2 315 You must do this because Eclipse/EGit/JGit (<= 1.1.0) always verifies certificate hostnames, regardless of the *http.sslVerify=false* client-side setting. 
d39680 316  
3b5289 317 - **Eclipse/EGit/JGit**
1f9dae 318     1. Window->Preferences->Team->Git->Configuration
JM 319     2. Click the *New Entry* button
3b5289 320     3. <pre>Key = <em>http.sslVerify</em>
JM 321 Value = <em>false</em></pre>
322 - **Command-line Git** ([Git-Config Manual Page](http://www.kernel.org/pub/software/scm/git/docs/git-config.html))  
323 <pre>git config --global --bool --add http.sslVerify false</pre>
1f9dae 324
JM 325 ### Cloning an Access Restricted Repository 
3b5289 326 - **Eclipse/EGit/JGit**  
JM 327 Nothing special to configure, EGit figures out everything.
328 <pre>https://yourserver/git/your/repository</pre>
329 - **Command-line Git**  
330 My testing indicates that your username must be embedded in the url.  YMMV.  
331 <pre>https://username@yourserver/git/your/repository</pre>