I haven't necessarily selected Bonobo Git Server because I think it is the best project on todays GitHub Trends for C#, but because it made me think.  It made me ask myself, "Why would I want to self host a Git Server and who would want to?"

Before I get on to Bonobo, I should probably mention that Umbraco Cms is trending today, which is nice to see!  So well done guys!

Bonobo Git Server is a Git server that allows you to host your Git Repositories on a Windows Server and serve them from IIS. This is great for those who want to host a Git Server on a Windows-based machine. There are alternatives out there such as GitLab but it requires a Unix based system. I am sure somebody has managed to get GitLab running on Windows, but I don't think it is worth the extra effort. Personally, I am not a fan of installing Ruby on a Windows machine. There are other alternatives, but none that I can see are free and open source.

Bonobo seems to have the core features I would want from a Git Server. For businesses, it's nice to see that it has member and group access control to repositories. However, based on what I've read, I do feel that it is missing some features I use often that are available on other Git Services such as Pull Requests, Merging and creating Branches (I know, lazy). Granted, merging and creating branches are easily done via the Git client but those are handy features to have when the pressures on to get a million other things done. I'm sure there are other developers who understand that feeling. However, here it specifies that Pull Requests are often implemented in different ways depending on the Git Service; GitHub and BitBucket implement this slightly different, so this is understandable.

I don't think these features would put me off of using it for closed source projects. Even if I was working for a startup business, I would probably still recommend it over the other alternatives - it's functional, provides the core Git functionality and runs on Windows!

The pre-requisites for installation is:

  • IIS 7 or higher
  • .NET Framework 4.5

Could that get any better?

To install, extract the released zip, assign the correct folder permissions and then point IIS to the directory. The installation seems as easy as setting up a basic MVC website.

Finally answer, "Why would I want to self host a Git Server and who would want to?"

Hosted Git services such as GitHub and BitBucket have a number of benefits. No server maintenance, constantly being updated with new features and bug fixes, not to mention a good community and a whole host of online tutorials.

However, there are problems with hosted Git services. I worry about losing my repositories! What would happen if I got hacked, or even worse, what if GitHub got hacked!

Back in 2014, my Hosted Git provider was CodeSpaces. The reason why CodeSpaces isn't around now is because CodeSpaces had their AWS account hacked, where the hacker created themselves multiple AMI user accounts without CodeSpaces knowing about it. The hacker held CodeSpaces to ransom until CodeSpaces decided to change the password of the admin user account, locking the hacker out, at which point the hacker logged in with the an AMI user account and deleted their EC2 Instances, EBS volumes and large amount of backups. I was lucky that they had only 1 backup for each of my repositories! They closed the business and after a few days they sent me a zip of the bare repository for each of my repositories. Later I found out that they didn't even have off-site backups. Anyway, the moral of the story for them was to treat security seriously. They should have been using multi-factor authentication that Amazon supported and should have been performing off-site backups. The moral of the story for me was that I cannot put all my eggs in one basket...my own backups are the true key to keeping my repositories safe. The larger GitHub and BitBucket get, the larger the risk of them being attacked, so I hope they have learned a lot from the unfortunate CodeSpaces disaster.

So I conclude, whilst I really enjoy the additional features and ease of use when using hosted Git Services, I am aware that nothing is perfect. Self-hosted Git solutions are a viable option when it comes to security and control. In which case, I would certainly consider a Bonobo Git Server for this mainly because I'm familiar with the OS it runs on and the architecture its built upon. And most importantly it's open source, so I hope this project continues to get better :-)