[...], instead I got "Removed foreign_ident from unchanged file foo". I had to reset HEAD^ and commit to get it in when that happened.
Yes, because what the pre-commit hook saw was that you made a spurious change of .gitattributes, removing the foreign_ident attribute from foo without actually modifying foo itself, which is not allowed.
So this hiding of some of the changes hits you both coming and going, I'm afraid. What you can do is commit with --no-verify, which skips the pre-commit hook altogether. I think it still runs the post-commit hook, so you'll get the checks there.
[...] and I assume the githelper on the server needs to be updated with it before I can push my 7.9 tree. Or does that happen automatically?
It's automatic; there's a message to that effect displayed when you push githelper, but I guess it can get lost in the other line noise.