It was quite a journey to get there but that's part of the adventure, isn't it? When I started working on opsi everything was in Subversion. Having used git before with joy I immediately started using git-svn for my work. This isn't the most seamless integration but worked well enough in everyday use.
What did not work so well was our development workflow. It happened probably more than one time that one of us developers broke something and there wasn't a too easy way to roll back. Not to mention that everything was in one branch. That wasn't satisfying for any of us and it also could affect users - help!
But I am lucky that I am working with poeple that do not hesitate to try things. Even though git being a complete new island with it's own rules and quirks they did not stop trying. First babysteps happened with git-svn. Later new projects started with git. When we felt confident enough we started migrating first repositories from Subversion to git with svn2git.
With git it is very easy to work with branches and we aimed to implement a workflow that makes use of Feature Branches. We tried various things and stumbled from time to time, but to our relief we never had the feeling that things were completely messed up or beyond any repair. In the end we now have established a workflow that works very well for us and makes releasing a pleasant experience.
Unfortunately we left the synchronisation with the public repositories behind. In other words: we were not an easily accessible open source project anymore. Sure you could just grab the source from the distributed packages. But honestly this is far from a nice experience, far from the experience I'd like to have with open source projects!
After various considerations and testruns we decided against hosting our own public git repositories and use already existing solutions instead. Our final decision led us to Github.
I hacked together a simple script to automate the mirroring of repositories. This script makes use of doit and some very basic git commands. One trick that I leverage is that you can configure git to use different addresses for push and pull. Mirroring is now kicked off daily through a cronjob. Amazing times!
With all that in place this isn't the end. There are still repositories remaining to be migrated and set up for the mirroring. In addition I want to review the contribution process. Contributing should be made easy! In the end it is not just about having an open sourcecode. For me it is about living the open source idea!
Disclaimer: I work at uib GmbH. uib is the company maintaining opsi. Developing opsi is part of my job.