问题
I have a remote server on which I have created a bare git repository.
I would like to create a hook so that a given script is run on the latest code received on any given branch.
I know the post-receive
hook can be used for it. However I want to do the following:
- Get hold of the branch on which code was received.
- Checkout the code in a temp location and run an operation on it.
How do I do the above?
回答1:
- 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
来源:https://stackoverflow.com/questions/11322356/how-to-process-files-on-a-branch-in-post-receive-hook-in-git