Earlier tonight, I went to a conference about Git given at the local JUG and I have to say that I do not fully agree with this presentation. One of the point was that the Build Manager role is over and that people having this kind of job should start to look for something different and all power to the developers. Maybe I have a different understanding of what a Build Manager is entitled to. To me, it is the management of branches, releases, build process and the overall good wealth of a software repository. And in my opinion, unlike what was said, I think Git is a great push and revival of the Build Manager and Integration role. Notwithstanding the fact that the usage pattern he described, a central repository with almost no branching, is, I think, very un-git-y.
Think about it. What is the main example of Git usage? The Linux kernel. What is the role of Linus Torvalds? Build Manager. He doesn’t code a line (almost) but just get patches from others to integrate them in the official tree. What is the other main usage of Git? Github: You can create (or fork) a project, have people develop features and create pull requests that you integrate if you wish to, picking whatever suits you.
Git (and other DCVS probably) is the best Build/Integration Manager tool: Developers can work however they want on their own repository and be empowered by fast versioning tools while a central role can coordinate and pick whatever features are available, in order to have the best resulting software (and eliminating the risk of a developer committing and pushing everything (for backup reasons) to the master server on a friday night, including unfinished and/or broken features).
Having a central repository where everybody pushes features without any control is just a bastardized (un) distributed revision control.
Compared to my real life usage of SVN in an enterprisey usage, the main selling point of Git (and probably other DCVS) is the ability to have local branches at a nearly zero cost (for either creation or switching), not only for a feature-branching workflow but simply to have at hand the various points of the life of a software (development version, latest/current release, maintenance releases…).
(more…)