较早的一个问题导致了一些关于如何检查您的 Git 存储库是否包含脏索引或未跟踪文件的想法。我从那次讨论中采纳的答案如下:
#!/bin/sh
exit $(git status --porcelain | wc -l)
该答案背后的想法是模仿程序员会做的事情:运行git status
然后检查输出。
不幸的是git status --porcelain
,git status
不要做完全相同的事情。特别是,git status
将报告未推送的更改,而git status --porcelain
不会。这是一个例子
[jarmo@localhost math-hl]$ git status --porcelain
[jarmo@localhost math-hl]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
所以我的问题是:我需要在原始脚本中添加什么来识别 repo 何时有未推送的更改?特别是,这将是一个正确的方法吗?
#!/bin/bash
if [ $(git status --porcelain | wc -l) != "0" \
-o $(git log @{u}.. | wc -l) != "0" ]; then
echo "local repo is not clean"
从长远来看,可以依赖git log
,还是应该使用“管道”命令?