No one can give you the "best" way with such limited information.
As with many other distributed version control systems, the decision about how you are going to publish your projects (many branches in one repository or several repositories with one / several branches) is largely independent of the most important issues of general history management (how do you will handle the history that Git writes).
First, I would like to focus on determining which bits of data and history should be shared between projects. With impatience, history will entail not only what happened in the past, but also what you expect in the future.
It looks like you can have a basic file set that is common to all of your projects, and then have some files / changes for each project located on top of the basic file set. As a story chart, it might look like this:
a1
/
o
\
b1 customer-b
, , :
a1
/ / /
o
\ \ \
b1
, , "" - git rebase:
Rebase customer changes on top of four new base changes:
a1
/ a1'
/ /
o
\ \
\ b1' customer-b
b1
Another change for B, and two more changes in base:
a1'--a2'
/
/ a1''
/ /
o
\ \
\ b1''
\
b1'--b2
(base, customer-a, customer-b) , ( , ).
/ , , , /. (, , ), () , (/) . , , .
, ( ). "" ( , ).
, , .
- , ?
- ?
- , , /?
- ( ) ?
- (StGit, TopGit, Guilt ..), ?
, Git (, GitHub, git.or.cz, gitorious/gitosis/... ..). /, , ( Git ). - , . , , .
documentation . Git - . Git Computer Scientists Git Git . Git () (Git merge) (Git cherry-pick, Git rebase [-i]) Git .