According to the manual, the post-checkout hook is run after a git checkout (just as expected) but also after a git clone (unless you pass --no-checkout).
Very well, now, considering the following:
- you don’t have a local repository before a
git clone - hooks are not synced between remotes
hooks stored in a custom template directory used with(that is actually not true as stated by Jefromi in his answer, but the hook is still not executed)--templateare copied non-executable and therefore not executed aftergit clone
It seems impossible that a post-checkout hook ever gets executed after a git clone. Still, the githooks man page at http://git-scm.com/docs/githooks explicitely states a way to avoid it being executed, and also parameters passed in case it is executed, which would indicate it is possible to execute a custom hook after a git-clone.
So, how is it possible? I am obviously missing something here.
Turns out
I suppose you could make a custom installation – rename the hooks in
.../share/git-core/templates/hooksto remove the.samplesuffix.You could also make a template directory full of symlinks to a hooks directory inside the repository, (e.g.
post-checkout -> ../../hooks/post-checkout). Then if the cloned repo contained that particular hook, it’d get executed.You’re right, though, in most cases it will not happen.
Edit: I just tested it, and the
--templateoption does appear to preserve permissions, so that’s a much more straight-forward way to make it happen. What’d you see to indicate that it stripped that bit?The final say on versions: You’re looking at documentation online for a newer version of git than you’re using. This feature was added in
dfa7a6c(clone: run post-checkout hook when checking out);git describesays this wasn’t included untilv1.6.2-rc2.