There is a video on the tube and it makes me laugh and think in the same time. Linus Torvalds is great, and speaking from his heart about why he made GIT and how he thinks it should/does work.
For people who still don’t know what is the main difference between using decentralized vcs instead of centralized this is a great video to watch.
Some advantages of decentralized vcs as Linus says:
Working offline has the same feeling and makes developer use branches even if they don’t recognize. All pulled out codes are on a kind of branches. Your own branch. More beauty that using 1 branch can lead you using several branches. 1 branch for development of a modul, 1 branch for maintenance, etc. Which results as you can work on different tasks separately and push them back on main branch.. also separately! Working offline feels like almost the same when working online. Offline commits happen, can be used as usual and branch changing is available option as well. One repository above all? Kind of!
Also no matter what labeling methods does the main branch use, it does not force you to use the same.
A good question: how to avoid merge conflicts in a decentralized vcs?
Linus’s answer has some preconditions. There should be a master with the rights for pulling anything into the main branch. This is the guy who pulls, nobody else. He can be asked to push the button and check weather the pull is okay.
If 2 maintainers ask him to pull in their stuff he would first pull person A’s branch (probably whose mail first came into his box). This should not cause any problems and conflicts. Then if pulling of person B’s codes would cause conflict, then Linus wouldn’t start to resolve the merge and fix but tell person B to update his branch and fix the code conflict like he desires to. Person B is the expertise of the part of the code which changed and he is the one who can best resolve the conflict.
After B is finnished with fix, Linus can easily pull in his branch as well.
So the video is here in case if it were not enough 🙂