bit of old thread but i would like to put my thoughts, i would say go for puppet smart classes.
Lot of time ppl says smart classes does not have version contorl, but i will argue and say, what's the purpose of version control, so it will be like, to audit changes, version/tag data, roll back to previous version in case of an issue.
but in my view, all of the above things are possible with smart classes, or i will say, audit is very easy with smart classes and UI/API allows you to make changes easily and permission model also works very nicely.
Now mostly i would use GIT for my puppet code ( which grows very rapidly, and lot of ppl make changes to same code ), where i want to monitor my code changes and review, where GIT gives nice visibility and differences between commits,
most of the time with puppet data, not everyone is making change to single data ? and they are once defined mostly they are not going to change very frequently?, smart classes you have single UI page per puppet class, so in case you are making change to ntp::server, hardly it will affect other puppet smart class ntp::driftfile or resolv::servers, so changes can be made without involving version control, and you already have audit.
you need GIT expertise when you use GIT, like if you are in 4th commit and you want to rollback to 4th commit preserving 1,2,3 commit, how easily you would do that ? i would prefer just look at 4th commit and make changes and do new commit which will be 5th commit, that looks easier to me, bcz in case of data, it will only be related to some puppet class and that will be of single line change or may be 5-6 line, which can be easily done with smartclasse UI/API without putting in GIT.
all above are my thought, you might have different opinions