I am not sure what you mean by branching each version of current project.
Anyway, git advices that you create 'topic branch'. By 'topic branch', it means that you create a branch when you are working on a feature/bug. Let's say I am working on jQueryUI and I have been asked to add a feature to jQuery Calendar which allows user to specify dates which are not selectable.
If I am in branch named master, I will create a local branch named 'SpecifyDateExclusion' branch and start making my changes. Any and all the code related to this feature will go in this branch.
master
|
|
|___ SpecifyDateExclusion
While I am working on this feature, a bug report comes that calendar is broke in Opera 10 and this bug needs to be fixed now. I go back to my master branch and create another branch named Opera10BugFix and start fixing bug in it.
master
|
|
|___ SpecifyDateExclusion
|
|
|___ Opera10BugFix
Very soon, you may have branches like
master
|
|
|___ SpecifyDateExclusion
|
|___ Feature1
|
|___ Feature2
|
|___ Feature3
|
|___ Opera10BugFix
|
|___ BugFix1
|
|___ BugFix2
What's the advantage you may ask?
The advantage is the flexibility it gives me while preparing my release. Let's say my next release is mainly about bug fixes.
I will create a new branch named 'InterimBugFix' from master and merge all my bug fix branches.
If I want to create a mix of bug/feature release, I will create a branch named 'NextVersion' from master and merge my feature/bug fixe branches.
Git is extremely powerful about how you manage these branches and if you can imagine something, Git will let you do it.