> Can't use real git hooks. understandable in the shared environment, but an annoyance and it's worth mentioning.
It's also worth mentioning that the selection of hooks available pretty much trumps any standard git hooks that I've ever dealt with. And if you really need some custom functionality to fire, you can set up a custom webhook URL that points to your own server somewhere.
This then requires exposing a crucial part of your development workflow at a public URL (even if the resource is authenticated). For various reasons, this is quite simply a non-starter for many shops who might otherwise be prepared to bite the bullet and put their source code on Github's servers.
You're forgetting that there are other types of hooks besides post-receive.
"The first script to run when handling a push from a client is pre-receive. It takes a list of references that are being pushed from stdin; if it exits non-zero, none of them are accepted. You can use this hook to do things like make sure none of the updated references are non-fast-forwards; or to check that the user doing the pushing has create, delete, or push access or access to push updates to all the files they’re modifying with the push."