Bash在登录时检查Git更新

时间:2017-11-13 14:15:14

标签: git bash ubuntu github

我正在尝试检查我的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提取的,登录到该计算机时首先以普通用户身份登录。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

使用您提供的脚本,您无需检查遥控器是否比本地更新(您写道这是您想要的)。您调用git merge-base并将其保存到变量BASE,检查是否与本地分支相等。您认为BASE变量包含什么?它包含您提供的两个提交之间的共同祖先。如果您在过去从遥控器中撤出后本地分支未被更改,则两个提交(变量LOCALBASE)都将相同。因此您更有可能检查您的本地存储库是否发生了更改此外,还应以不相等的方式打印消息。

请查看第git merge-base example页上的第一张图片。让我们假设您过去拉过本地分支,然后远程和本地分支都将处于提交1。然后稍后会有一些提交添加到远程,所以在这张图片上它可能是名为A的分支,但你的本地分支不会被更改,所以它仍然指向提交1 。当您在此状态git merge-base调用时,结果将提交1,因此相等。

我看到另一个问题你是否取得遥控器? AFAIK没有任何命令自动执行。

答案 1 :(得分:0)

单个'='是归因。

使用双'=='进行比较。

所以:

if [ $LOCAL == $BASE ]; then

答案 2 :(得分:0)

测试应该是:

if [ "$LOCAL" == "$BASE" ]; then