<span style="line-height: 1.5em;">Until recently, we have been using a virtual machine as our git server. The computer that hosted this was a big, noisy, rack mounted server running a XenServer.</span>

A few weeks ago, we moved to a temporary location until we move to our permanent location in Q3 '14. This led us to cut down on the number of computers we depend on, especially our servers. We had to figure out a way to keep our dev loop going without sacrificing work space environment.

It was then that <a href="https://twitter.com/arshad_umar" target="_blank">Umar</a> started hacking on <a title="GitLab" href="http://https://www.gitlab.com/" target="_blank">GitLab</a> to get it working for us internally. We had discussed this idea in a few meetings before, but for various reasons, they were not acted upon. The office move came as a blessing in disguise. He used one of our old Dell Inspiron laptops that was just gathering dust. We ordered new DDR2 (yes, DDR2) RAM for it and installed Ubuntu. Soon, we were ready to go.

It has been about 3 weeks since we have been using GitLab, and it has been nothing but great. Here few of the benefits of deploying GitLab:
<ul>
	<li><strong>Accounts</strong>: Each user has their own account and can manage SSH Keys. Previously we had to semi-automatically distribute keys throughout our build setup.</li>
	<li><strong>Keeping track of commits</strong>: Using native git on a server, we had the updates going on a news group. This was a bit hard to keep track of. Using GitLab, the dashboard shows updates and activities to all the branches and repos that you are either participating or watching.</li>
	<li><strong>Groups</strong>: We do a lot of development, on ArrayFire as well as accelerating software for our customers. GitLab's  groups feature makes it easier to isolate independent projects.</li>
	<li><strong>Owners</strong>: Previously access to the development and master branches was only restricted by word of mouth. However this was not always stringently enforced. GitLab made it easier to restrict access to such branches. Only the Owners are allowed to push and anyone else needs so send out a "Merge Request" (similar to a pull request on GitHub). I was one of the developers whose access has been restricted but I happy about this. It forces me to work in feature branches more often and not send out silly commits to our development branch.</li>
	<li><strong>Merge Requests</strong>: As soon as new code is open to be merged, we send out a merge request to the branch owners. The owner's receive notification and can review the various commits and diffs on the browser itself. Then we review, comment and create issues as discussed below. This also had the side effect of being a distributed code-review process.</li>
	<li><strong>Reviews and Comments</strong>: Users can add comments to specific lines of code or in general. Comments can also include "Thumbs Up" and "Thumbs Down" icons which can be used to indicate great work or to indicate votes when doing a code review. We can add comments to comments which makes them look neatly organized.</li>
	<li><strong>Issues</strong>: One of the best parts of GitLab has been the ability to create issues. Previously, we used JIRA to handle this side of our dev loop. However JIRA became just another technology we had to live with. With GitLab, that extra system has been eliminated. The issue system in GitLab provides the ability to create and close issues. It also integrates nicely with git commits and merge requests.</li>
	<li><strong>Stats</strong>: GitLab also creates various statistics and graphs on its own, such as number of commits, lines added and deleted. Each user gets their own chart as well. The only thing we really use this for? Bragging rights.</li>
</ul>
<span style="line-height: 1.5em;">GitLab has been so useful that it has become a pinned tab on my browser (and for most people's from what I have seen). It has been the best thing to happen to our dev-loop since our automated build system on Jenkins (the appreciation of Jenkins will be whole another blog on its own).</span>

Let us know what your experiences with internal development are and the tools that you use. If you are using GitLab, what are your experiences with it ?