When git feeds the file to puppet parser on your git repo server, it is doing so via a temporary file (evidenced by
remote: Error: Could not parse for environment production: No file(s) found for import of 'fix.pp' at /tmp/tmp.hujjYZKPpC/manifests/nodes.pp:9 ). Because it is a temporary file it does not have the rest of the git tree available, and so the import 'fix.pp' line cannot succeed (on your git repo server. Obviously the file works perfectly fine with a working tree to use).
# NOTE: There is an outstanding bug against `puppet parser` which causes
# the --ignoreimport option to turn the syntax check into a no-op. Until
# the bug is resolved, the syntax check hook should not include the
# --ignoreimport option and will only work correctly on manifests which
# do not contain "import" lines.
# See http://projects.puppetlabs.com/issues/9670
You can try to work around this on your server-side hook by changing
git cat-file blob $new_sha1 > $tmp
to
git cat-file blob $new_sha1 | grep -v '^\s*import' > $tmp
disclaimer - I've not tested this, I am not a doctor, etc.
Jeff