我正在尝试检查我的git repo是否有更新。 当我登录到我的Ubuntu服务器时,我需要这样做,所以我想我会用以下
修改/etc/update-motd.d/90-updates-available脚本一旦找到它就应该cd
进入我的仓库,然后将它与远程仓库进行比较,如果远程更新,则打印通知。
#!/bin/sh
stamp="/var/lib/update-notifier/updates-available"
[ ! -r "$stamp" ] || cat "$stamp"
cd $(find / -wholename '*-Commander*/.git' | xargs -n 1 dirname)
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")
echo "----------------------------------------------------------"
echo ""
if [ $LOCAL = $BASE ]; then
echo "Repo Need to be Updated"
MEM=$(free -m | grep -oP '\d+' | head -n 1);
if [ $MEM -lt 2048 ]; then
echo "Low Mem Check"
fi;
fi;
echo ""
echo "----------------------------------------------------------"
我发现的是,无论如何......登录到机器时,它仍会显示Repo Need to be Updated
,即使它是最新的。
请注意,repo是作为sudoer
提取的,登录到该计算机时首先以普通用户身份登录。
我做错了什么?
答案 0 :(得分:1)
使用您提供的脚本,您无需检查遥控器是否比本地更新(您写道这是您想要的)。您调用git merge-base
并将其保存到变量BASE
,检查是否与本地分支相等。您认为BASE
变量包含什么?它包含您提供的两个提交之间的共同祖先。如果您在过去从遥控器中撤出后本地分支未被更改,则两个提交(变量LOCAL
和BASE
)都将相同。因此您更有可能检查您的本地存储库是否发生了更改此外,还应以不相等的方式打印消息。
请查看第git merge-base example页上的第一张图片。让我们假设您过去拉过本地分支,然后远程和本地分支都将处于提交1
。然后稍后会有一些提交添加到远程,所以在这张图片上它可能是名为A
的分支,但你的本地分支不会被更改,所以它仍然指向提交1
。当您在此状态git merge-base
调用时,结果将提交1
,因此相等。
我看到另一个问题你是否取得遥控器? AFAIK没有任何命令自动执行。
答案 1 :(得分:0)
单个'='是归因。
使用双'=='进行比较。
所以:
if [ $LOCAL == $BASE ]; then
答案 2 :(得分:0)
测试应该是:
if [ "$LOCAL" == "$BASE" ]; then