We are about to start splitting our web application into multiple services, each being their own repository. We use git as our scm and I am wondering if anyone has any recommendations for a workflow for our scm (in this case git).
Right now we use a similar workflow to what is shown here: http://nvie.com/posts/a-successful-git-branching-model/.
I would like to move to a simpler model, such as how Github works: http://scottchacon.com/2011/08/31/github-flow.html. Is this feasible for developing SOA?
Curious as to if anyone has an opinion on this. Thanks.
Github flow relates feature branches to a single product, but there is no reason it couldn’t be implemented . Your workflow options depend on how you deploy your application. Consider “MyApp”, which has three component services:
If you can deploy
ServiceAindependently ofServiceBandServiceC, and more importantly deploy all of those independently of code contained by MyApp but which exists in none of theService*repositories, then just apply Github flow, your preferred workflow, to each repository and team.If the services are heavily intertwined, and deploying
ServiceAnecessarily requires a deploy ofServiceBor more importantly,MyApprepresents a significant chunk of scaffolding or routing code that has to advance every time one of theServices*repos do, then you might want something like submodules or subtree. In that model, you’d have one Github flow, and an additional step between #4 and #5, namely collecting submodule (or subtree) updates to the services before deployment. I would avoid repository nesting without subtrees or submodules, unless you (and your team) know git extremely well.All of that written, I’d suggest you take a deep look at your motivations for splitting the application at all. There are advantages to it and successful workflows on it, but they come at a cost: It’s more difficult to get a “whole picture” of your history; in certain circumstances it can be harder to debug with tools like
git bisect; each new developer has to learn your git infrastructure before he or she can be comfortable working your codebase. These aren’t reasons to abandon your plan, just food for thought.