On Tue, Jan 26, 2010 at 08:53:06PM -0600, David Bruce wrote:
> Hi,
> 
> A little follow-up, now that I know a bit more about git and the
> problem I'm encountering.
> 
> Basically, on the server I have two git repos for tux4kids-web.  The
> bare repo which receives pushes is /git/tux4kids/tux4kids-web.git.
> 
> There is an ordinary, non-bare clone of this repo on the same machine
> at /home/groups/tux4kids/tux4kids-web.  The working directory of this
> repo contains the docs for our public-facing website.  What I want is
> for this directory to be automatically updated whenever the bare repo
> receives a push.
> 
> My understanding is that this should be done through the "post-update"
> hook under the bare repo, i.e. at
> /git/tux4kids/tux4kids-web.git/hooks/post-update.  I've edited this
> script so that it works as intended when invoked directly (it
> basically changes to the target repo, does a "reset GIT_DIR .", and a
> "git pull").

When you say "reset GIT_DIR ." what are the exact commands
you're using?  I'm not sure what that means.


Things to note about post-update hooks:

- When run via git they will define the 'GIT_DIR' environment
variable.  It is usually defined to '.', aka the current
directory, so many hooks unset that variable.

It is quite common to say "unset GIT_DIR" at the top of a
#!/bin/sh post-update shell script.

This should be all it takes...

#!/bin/sh
unset GIT_DIR
cd /home/groups/tux4kids/tux4kids-web &&
git pull origin master


If you have uncommitted changes in tux4kids-web then that will
fail because 'git pull' might complain about losing your
uncommitted changes.

If the intention is to never do that (unless by accident) then
the following works by throwing away any accidental edits in
/home/groups/tux4kids/tux4kids-web:

#!/bin/sh
unset GIT_DIR
cd /home/groups/tux4kids/tux4kids-web &&
git fetch origin &&
git reset --hard origin/master


> However, the post-update hook never gets run when I push to the bare
> directory.  Is there something I need to do to enable
> "hooks/post-update" other than changing its name from
> "post-update.sample" to "post-update", editing it so it does what I
> want, and making sure it is executable?

That should be all it takes.  Hmm.
You already mentioned that it's chmod 755 and renamed.

You're sure it's not running?  Have you tried logging to a file?


If you 'git push' and everything's up-to-date then it probably
won't run, I would assume.

You can always force the push for testing purposes:

# Force push the previous revision to the remove master branch
git push origin +master~:master

# Now push the latest; this should update your checkout
git push origin master


Of course, don't try this from
/home/groups/tux4kids/tux4kids-web
since the hook chdirs there and does stuff.

You'll need a separate place for actually making changes,
commiting, and pushing.

More about hooks:
http://www.kernel.org/pub/software/scm/git/docs/githooks.html


-- 
                David

-- 
You received this message because you are subscribed to the Google Groups "Git 
for human beings" group.
To post to this group, send email to git-us...@googlegroups.com.
To unsubscribe from this group, send email to 
git-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/git-users?hl=en.

Reply via email to