Setting up post-receive hook for bare repo

岁酱吖の 提交于 2019-12-28 15:23:13

问题


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 than git 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!