在远程服务器上架设了一个http server,然后通过git在本地做开发时,不想每次都登录到远程服务器上做pull操作,这个需求可以通过git hooks特性来实现。
原理是每当有用户更新代码时,会触发xxxx.git的hooks中的post-receive,然后把要执行的操作写在post-receive中就可以了。
开始的想法是
#!/bin/shcd /project/canyongit pull currTime=$(date "+%Y%m%d%H%M%S")echo $currTime >> /project/canyon/log
然后这种写法会出现找不到git repository 的问题,原因是在执行git pull 时引入了$GIT_DIR变量
remtoe: fatal: Not a git repository: '.'
于是我们将post-receive改为
#!/bin/shunset $(git rev-parse --local-env-vars)dir="/project/canyon/"logfile="/project/canyon/log"cd $dirgit pull currTime=$(date "+%Y%m%d%H%M%S")echo $currTime >> $logfile
这样每一次用户pull成功都会将/project/canyon中的git仓库更新