我正在使用git发布一个网站。 工作流程大致如下:
$ git add my_file
$ git commit -m comment my_file
$ git push # Just house-keeping, goes to my master repo
$ git push ssh://user@webserver//var/www/repo.git
Web服务器上的post-receive挂钩如下所示:
#!/bin/bash
working=$(pwd)
working=${working##*/}
working=../${working%.*}
while read oldrev newrev ref ; do
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
done
绝大多数时候这种方法运作得很好。 我说的很好,我的意思是,如果我添加了一个文件,结帐会修改一个文件。
只有我等了一天然后再做一次提交& push,post-receive hook中的git checkout重新获取工作副本中的每个文件。它不仅需要很长时间,而且还会与我之后运行的rsync混淆。
一夜之间会发生什么,以便明天发生的结账与我今天可以反复重复的结账大不相同?
答案 0 :(得分:0)
你在使用分支机构吗?从您的收件后挂钩看起来,您不会过滤您想要用来托管您网站代码的参考。相反,它会为每个修改后的ref进行检查。如果您将某些代码推送到另一个分支,那么您的网站将会更新以反映出来。我想你可能只想运行结账的结账(也许是refs/heads/master
),就是这样。
也许正在改变
while read oldrev newrev ref ; do
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
done
到
while read oldrev newrev ref ; do
if [ "$ref" == "refs/heads/master" ]; then
branch=$(echo ${ref} | cut -d/ -f3)
GIT_WORK_TREE=${working} git checkout -f ${branch}
fi
done