我正在使用 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
绝大多数情况下,这工作得很好。当我说好时,我的意思是,如果我添加了一个文件,结帐会修改那个文件。
只有当我等待一天然后再次提交并推送时,post-receive 挂钩中的 git checkout 才会重新获取我工作副本中的每个文件。它不仅需要很长时间,而且会与我稍后运行的 rsync 混淆。
一夜之间会发生什么,以至于明天发生的结帐与我今天可以一遍又一遍地重复的结帐完全不同?