ok nice, try the following gitignore file:
# Ignore everything in repository root
/*
# Files to not ignore
!/.gitignore
!/some_other_files
# Folder to not ignore
!/puppet/
The key point is the slash before the *
.
In your case the *
affected also to the files in puppet
.
So to be on the safe side use absolute paths like in my example
I asked a similar question a while ago: Git Ignore everything in a directory except subfolders