一直使用githook post-update来部署我的jekyll博客,每次push到远程git仓库的时候,在vps上的生产目录会自动更新和重新生成页面和静态资源, post-update文件是这样的:

#!/bin/usr/zsh

branchName=$(git rev-parse --symbolic --abbrev-ref $1)
HOME=/home/******
BLOG_DIR=$HOME/*******

cd $BLOG_DIR
git pull origin $branchName

if [ $branchName = "master" ]; then
  [ -s $HOME/.nvm/nvm.sh ] && . $HOME/.nvm/nvm.sh # This loads NVM
  export PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
  nvm use 113
  $HOME/.rvm/bin/rvm use ruby-2.0.0
  jekyll build
  make front
fi

exec git update-server-info

但是执行的时候会出现一个奇怪的问题:

Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 281 bytes | 0 bytes/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: fatal: Not a git repository: '.'
...

最后的这一句表示出错了,而且git pull也没有正确进行。

有人在这个问题中谈到解决方法,改进的部分在这里:

cd $BLOG_DIR || exit
unset GIT_DIR
git pull origin $branchName

之后果然就可以正确地pull代码了。

  • Git

利用git rev-parse

刚来公司的时候,电脑上的项目运行环境还没有搭配好,一些前端的改动只能推到测试服务器上才能看见效果。因此在开发的时候要频繁地切换和合并开发分支到与测试环境的部署相关联的测试分支上,频繁地手敲命令checkout -> pull -> 等代码p…pu…pul…pulled-> merge-> oh conflict!-> fix conflict -> push -> checkout 然后才查看页面继续开发。 前面的各种点点点急刹人,于是我写了个小脚本,省下了敲分支名的时间:

  #!/bin/zsh
  cur_branch=`git rev-parse --abbrev-ref HEAD`
  git checkout develop && git pull && git merge $cur_branch && git push origin && git checkout $cur_branch

国内配置开发环境的时候经常会要用到的这几个源, thanks to G*F*W ,我们自行get找国内镜像的能力:

  • NPM