问题
I have a bare repo set up in my ubuntu server.
After I push to my bare git repo to the server:
$ git push origin master
I want the contents of my non bare repo to be updated with the latest push as shown where the non bare repo is my actual work directory named workfiles.
$ cd /central/workfiles
$ git pull
$ exit
I have heard about the post-receive hook but do not know how to set up the same. How can i achieve the same.
回答1:
I prefer specifying the working tree and git directory instead of relying on a cd:
/bare/repo.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/central/workfiles GIT_DIR=/central/workfiles/.git git pull origin master
exit
As commented below by ChrisV, you can also rely one a git checkout
instead of a git pull
I believe
git checkout -f
is safer thangit pull
, as the merge which is part of the pull has the potential to make things messy if manual fixups should be needed.
But that means /central/workfiles
is not a "non-bare" git repo. It is just a folder where you checkout the content of the bare repo /bare/repo.git
.
See Brian Thomas's answer for an example of that approach.
That would not fit the OP specification.
回答2:
i use the post receive hook like this
#.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/srv/http/sitedir/ git checkout -f
yes, make sure to make it executable.
回答3:
I'd go with something like
#!/bin/sh
cd /central/workfiles
git pull
exit
Save the above script as post-receive
and place it in the hooks/
directory of your bare repo.
Bottom line don't forget to make it executable
chmod +x post-receive
来源:https://stackoverflow.com/questions/14453411/setting-up-post-receive-hook-for-bare-repo