publish-gh-pages.sh解读

  张一帆   2016年11月28日


  我怕经过很长时间以后想要修改某些东西,需要修改下这个脚本,然而忘记了怎么做。所以,打算对这个脚本进行注释。

#!/bin/bash    //bash脚本必须有这个

//定义一个函数,下面用的都是这个
function exe_cmd() { 
    echo $1 //打印出命令
    eval $1 //执行这个命令
}

if [ $# -lt 1 ]; then    //如果没有参数,那么就打印用master分支
    echo "Usage: sh $0 master"
fi

branch=$1  //运行脚本第一个参数为要目标分支,如果没有就用master
if [ -z "$branch" ]; then
    branch='master'
fi

exe_cmd "jekyll build" //运行jekyll build编译
if [ ! -d '_site' ];then //如果没有_site文件夹
    echo "not content to be published"
    exit
fi

exe_cmd "git commit -a -m 'jekyll build'" //提交git
exe_cmd "git branch -D $branch" //删除master
error_code=$?   //获取错误代码
if [ $error_code != 0 ]; then //如果有错误
    echo 'Delete branch $branch fail.'   
    exit
fi

exe_cmd "git checkout -b $branch" //从当前的分支复制并跳转到新建分支
error_code=$?
if [ $error_code != 0 ];then  
    echo 'Switch branch $branch fail.' //切分支失败
    exit
else
//filter-branch为重写历史
//--subdirectory-filter _site/ 选择_site文件夹当做这个分支的根目录 
// -f 忽略空文件
    exe_cmd "git filter-branch --subdirectory-filter _site/ -f"
    exe_cmd "git push --all --force origin"//提交到远程 force表示强退
    exe_cmd "rm -Rf _site/" //删除_site目录
    exe_cmd "git checkout docs" //切回docs分支
fi