Skip to content

Instantly share code, notes, and snippets.

@sergeylukin
Last active April 27, 2018 13:38
Show Gist options
  • Save sergeylukin/3175502 to your computer and use it in GitHub Desktop.
Save sergeylukin/3175502 to your computer and use it in GitHub Desktop.
Git hook (post-receive): update working tree on PUSH
#!/bin/sh
#
# This hook is placed in Bare repository and it updates Working tree whenever a PUSH
# is executed
#
# Assuming following file structure:
# .
# |-- myproject
# |-- myproject.git
# set WORKTREE=../myproject
#
# Where myproject.git - current bare repo and myproject - working directory
# To enable this hook, rename this file to "post-receive" and make sure it is executable
#
WORKTREE=../myproject
GITDIR=$WORKTREE.git
cd $WORKTREE
# update the working tree
git --work-tree=./ --git-dir=$GITDIR checkout -f
git --work-tree=./ --git-dir=$GITDIR clean -fd
# return to git directory
cd $GITDIR
# we have to read stdin in order to avoid
# sideband demutiplexer error
# more details here: http://bit.ly/PzbRwo
while read oldrev newrev refname
do
:
done
@Djabx
Copy link

Djabx commented Mar 6, 2017

Thank you, exactly what I needed !

One question, why do you use checkout -f followed by clean -fd and not reset --hard ?

@ivanovaleksey
Copy link

Thank you @sergeylukin.
But the link you provided says that one should read everything from STDIN before running actual script.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment