有些脚本在检查更改时不能正确工作。
我是这样试的:
VN=$(git describe --abbrev=7 HEAD 2>/dev/null)
git update-index -q --refresh
CHANGED=$(git diff-index --name-only HEAD --)
if [ ! -z $CHANGED ];
then VN="$VN-mod"
fi
是否存在某种布尔检查,自上次提交以来是否有更改,或者我如何真正测试本地存储库是否有新的更改?
我所做的所有这些都是为了一个版本创建脚本(我在这里的某个地方找到的)。
我查阅了很多Stack Overflow的答案,但没有一个符合我的期望。也就是说,如果出现以下情况,脚本会出错:
当前本地状态与原始/主文件之间有任何差异(包括:对现有文件的更改;新建未提交和已提交的文件,以及文件删除),或
Master有尚未推送到origin/ Master的提交。
最后的脚本可以这样使用:
if ! (git diff --exit-code origin/master..master > /dev/null) \
|| ! (git diff --exit-code master > /dev/null) \
|| ! [[ -z "$(git status --porcelain)" ]] ; then
echo "Your local repo has some changes that aren't pushed to origin/master ."
exit 1
fi
解释:
Git状态——瓷器将呈现尚未提交的文件列表。用[[-z "$(…)"如果命令返回了一个非空字符串,]]将会出错。
Git diff——exit-code master > /dev/null如果你当前提交的回购状态与主分支不同将会出错。
Git diff——exit-code origin/master..Master > /dev/null如果您当前的主分支与原点/主分支不同,将会出错。
这是有用的,例如,如果你想确保你的回购可能是安全的删除/清除。
为什么这样更好呢?
答案只依赖于git diff -exit-code…不会错误,如果你有新的未提交的非存储文件;
仅依赖于git状态的答案——porcelain不会告诉您有尚未推送到远程的提交。