使用shell脚本判断git状态

​在终于无法忍受包含中文的链接带来的种种问题以后,我决定把固定连接的格式修改一下,为此使用了hexo-abbrlink这个插件来进行文章编号的生成。

​这个插件会在hexo g的时候生成文章编号并将编号存储在文章abbrlink字段里面,这就意味着在hexo g的过程中需要修改文章源文件才能将文章编号持久化存储起来。

​这个过程在本地运行自然是没什么问题,然而如果使用GitHub actions自动生成并发布的话,就意味着在执行hexo g之后需要将当前的修改push回源代码仓库才行,这个操作看上去没什么问题,我甚至也发现了一个现成的github-push-action用于将代码push回原仓库。

​但是在实际操作中我发现在文件没有任何文件发生更改时执行git commit -m "something" -a的返回值是1,而这会导致GitHub-actions判定该step执行状态为fail进而终止执行。

​于是我考虑使用简单的shell语句来判断文件是否有修改,进而执行相应操作,将判断文件状态的几种可能方案记录如下:

​1、git diff --quiet --exit-code --cached可以用于判断已经追踪的文件是否有更改

​2、if [ -z "$(git status --porcelain)" ]可以检查文件是否有修改

​3、exit $( git status --porcelain | wc -l )可以直接作为返回值判0

具体代码如下

1
2
3
4
5
6
7
8
remote_repo="https://${GITHUB_ACTOR}:${{secrets.GITHUB_TOKEN}}@github.com/${GITHUB_REPOSITORY}.git"
if [ -z "$(git status --porcelain)" ]
then
echo "nothing to update."
else
git commit -m "triggle by commit ${{ github.sha }}. created by ${{ github.workflow }}." -a
git push "${remote_repo}" HEAD:master
fi

参考资料:

https://www.itranslater.com/qa/details/2126861753253364736


使用shell脚本判断git状态
https://blog.yrpang.com/posts/43978/
作者
yrPang
发布于
2019年11月9日
许可协议