At YMC, we love Git for version control. Git is fast and furious, decentralised and can be used offline. It allows you to easily undo mistakes, provides a simple branching concept, and eases development as well as integration processes.
A big community of everyday users provide more than enough online instruction to quickly understand the associated code management workflow and to easily kickstart Git-rookies. Support comes in the form of multiple graphical clients (such as SourceTree, Tower or GitKraken), and in addition common IDEs offer highly integrated Git-interfaces. This conveniently relieves practical and hesitant developers from learning/remembering all the different console commands. Ideal preferences for a reliable, collaborative code platform with lots of headroom for experiments, innovation and rollback-safety.
Do you want to participate in a project? Clone the original repository, commit and push your code changes – all done. Do you want to alter the codebase? Create a fork to start your very own product variant – and retain the ability to contribute your changes at a later point. Or, do you have a new project in mind? Create a new local repository, commit and push your code again – mission accomplished. Want to share a repo with your fellow devs? Share your local repository or push it to a remote location. But which one? There are plenty of options…
External service providers
The easiest way to host remote Git repositories is to use a cloud based service. Set up an account with a provider of your choice, initialize a repository, and you are ready to go. GitHub and Atlassian’s Bitbucket are the most popular ones on the market, both providing free and paid plans in various flavours. This is a very effective way to share code privately or publicly, enabling all kinds of code contribution. GitHub has become the de facto industry standard for Open Source projects and collaborative coding.
When considering your remote repository as a code source for multiple developers/teams/companies, sensitive development and as required artefact for software deployment, availability, reliability and security come into play. The service providers mentioned above can be considered fairly reliable, but does your team have all the upcoming maintenance windows of the providers in mind? Do you know when the next cyber attack will disrupt their service in a way nobody has thought of before?
You do not want your precious code bucket to disappear right at the moment when you’re rolling out the all important hotfix that is meant to save the day. Imagine sensitive customer code that cannot be shipped across country borders, or departments that have to cope with backup strategies in order to reach industry certification levels. What now? Your own code hosting becomes an imminent requirement, even if only used as your plan “B”.
Hosting your own Git repositories
There are only two things that you need:
- A host machine with installed SSH-server.
- A Git repository on this machine (see this article for setup-instructions).
After configuration, you can access your repository directly via SSH. No server process is required in order to access your repository, in fact Git can be server-less (an example for Ubuntu-servers can be found here). This procedure can be reproduced on one of your physical servers, or an EC2 instance if you don’t want to provide the sheet metal.
The main catch with hosting your own code is it will be hard to manage multiple repositories, and access to them. In most cases, there is no GUI to enable easy administration.
To put it into a nutshell, GitLab can be considered your own GitHub. It is a web-based Git repository manager with its own Wiki and issue tracking system, even the option for merge/pull requests is included. The code is written in Ruby, the Community Edition (CE) released as Open Source under MIT-license.
GitLab lives here:
This is where you download the software:
Apart from GitLab Inc.’s attractive service offerings, GitLab can be installed on your own machine in multiple ways, on multiple platforms:
In addition to GitHub for Open Source development, YMC has introduced GitLab for our own and customer purposes in 2013. We are very pleased with the overall user experience, required maintenance effort and ease of use. Apart from hosting code, GitLab provides us with the right tools to manage, maintain and archive valuable code internally. With GitLab, we have code availability in our own hands again (if required for a project).
Even better, the introduction of the feature GitLab CI enabled us to gradually replace additional CI-servers like Jenkins – a topic that will be covered in a future YMC blogpost – Continuous Integration (CI) with GitLab. Follow us on Twitter to make sure you don’t miss it!