- For 1), you have an example of reading the branch name (through stdin):
“Not able to detect branch from Git post-receive hook” - For 2), you need to set GIT_WORK_TREE appropriately:
“Managing website using git + post-receive hook: error pushing changes”
See both techniques combined in “Git post-receive for multiple remote branches and work-trees”:
#!/bin/bash
while read oldrev newrev ref
do
branch=`echo $ref | cut -d/ -f3`
if [ "master" == "$branch" ]; then
git --work-tree=/path/under/root/dir/live-site/ checkout -f $branch
echo 'Changes pushed live.'
fi
if [ "dev" == "$branch" ]; then
git --work-tree=/path/under/root/dir/dev-site/ checkout -f $branch
echo 'Changes pushed to dev.'
fi
done