Every one and their dogs use Continuous integration today …
And thinking about the developers and companies that are serious about software quality, they use some sort of TDD or at least write the unit tests for the written code too …
Most of them, at least the one I’m working now, do peer review too (ok, this post does not apply if you are lucky and doing XP)
With this scenario the standard work flow is:
In this workflow we have a great problem …
During all the time in bold the code in the repository probably has problems, or is not yet revised by QA …
Other problems in the standard version control systems are for example:
You cannot access the repository, and cannot commit your work if you are offline, this will cause problems, because your next commit will have more than one change set, so, it will be harder to track what commit caused a bug for example
Of course this approach has benefits too, but if you are using it, you may know its benefits
The idea of this post is to propose a little different workflow, that need a different approach to version control …
The workflow described above is very close to the one used with a centralized version control system, like CVS, Subversion, …
The one I’ll describe, needs a Distributed Version Control System, like Bazaar and Git, I chose Git because it is very fast ![]()
I still use a central repository as you’ll see bellow …
As you can see, this workflow is a little different from the previous one, and we have the following benefits:
Of course there are drawbacks too, for example:
I have wrote another post about synchronous continuous integration here, and you’ll find a rake task to help you if you are working with Ruby too.
So, I think that is it.
What do you think about this approach? are you using some thing like this?
If you enjoyed this post, make sure you subscribe to my RSS feed!
Tags: development, git, productivity, scm, version
You can however control who can push to which branches: see contrib/hooks/update-paranoid example hook.
And there is also contrib/continuous/ – hook and daemon for automatic running of continuous integration; note that I haven’t used it…