Shelves in SVN, GIT, Bazaar, etc.

This week, I am watching some screencasts about TFS and heard about shelves. Googled about this feature in SVN, GIT, Bazaar, etc. and in most links returned people recommends creating a shelves folder and a folder for each team member inside the shelves folder, which is good. The problem is that people recommend checking out from trunk directly to shelves subfolders, but I think it is not the way to go because when team need to synchronize unfinished changes they have to check in to trunk and having unfinished (defective) code on trunk is not acceptable, at least for me.

In my opinion, every change request must be worked out on branches. When change requests are worked out by a team and they need to check in/out often, shelves might be created based on the branch related to the specific change request. When anyone has finished their tasks, they shall merge to the branch and when everybody has finished, someone from the team should take responsibility of merging the branch to the trunk. To sum up: To check out, follow from trunk to branch and from branch to shelf (when needed -> team working on that branch). To check in, from shelf to branch (when needed -> team working on that branch) from branch to trunk when everybody is finished, code is functional and satisfies the change request.

Based on the above I would have structures like the one below:

branches
branches\changerequest001
branches\changerequest002
branches\changerequest003
shelves
shelves\teammember001
shelves\teammember001\changerequest001
shelves\teammember001\changerequest002
shelves\teammember002
shelves\teammember002\changerequest002
shelves\teammember002\changerequest003
tags
tags\version1
tags\version2
trunk

What do you think about it?

Luciano Evaristo Guerche (Gorše)
Taboão da Serra, SP, Brazil

No Comments