<span style="line-height: 1.5em;">Until recently, we had our central git repositories hosted on a virtual machine. This was running on a big, noisy, rack mounted server. We started thinking about cutting down the number of machines we use on a daily basis (Just can't stop optimizing). The opportunity popped up during an office move to our new location.</span>

<span style="line-height: 1.5em;">We had discussed this idea in a few meetings before, but for various reasons, they were not acted upon.</span><span style="line-height: 1.5em;"> During the move</span> <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. 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 git hooks, we had the updates going on a news group. This approach was not popular with many of our developers. 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).</li>
	<li><strong>Merge Requests</strong>: When we want to merge our changes to one of our main branches, we send out a merge request to the branch owners. The owner's receive notification and can review the various commits and diffs on a browser and merge the changes.</li>
	<li><strong>Code Review</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 workflow. With GitLab, that extra system has been eliminated. Like JIRA, GitLab allows you to create and close issues. It might not be as robust as JIRA but its nice that is integrated into one tool.</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 pretty much everyone else here). It has been the best thing to happen to our workflow since our automated build system on Jenkins (the appreciation of Jenkins will be whole another blog on its own).</span> What your experiences with internal development tools you use?