gpt4 book ai didi

git - Bash 在登录时检查 Git 更新

转载 作者:行者123 更新时间:2023-12-04 18:31:45 24 4
gpt4 key购买 nike

如果有更新,我正在尝试检查我的 git 存储库。
当我登录到我的 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 ,登录机器首先以普通用户身份登录。

我究竟做错了什么?

最佳答案

使用您提供的脚本,您不会检查远程是否比本地更新(您写道这是您想要的)。您调用git merge-base并将其保存到变量 BASE与您本地的分支机构检查是否相等。你怎么看BASE变量包含?它包含您提供的两个提交之间的共同祖先。如果过去从远程 pull 出后本地分支不会更改,则两次提交(在变量 LOCALBASE 中)将是相同的。 因此,您更有可能检查您的本地存储库是否未更改 消息也应以不相等的情况打印。

请看第git merge-base example页上的第一张图片.假设您过去 pull 过本地分支,那么远程和本地分支都将在提交 1 .然后稍后会有一些提交添加到远程,所以在这张图片上它可能是名为 A 的分支,但你的本地分支不会改变,所以它仍然指向提交 1 .当您在此状态下调用 git merge-base ,结果将是提交 1 ,所以平等。

我又看到一个问题 你拿 Remote 吗? AFAIK 没有任何命令会自动执行此操作。

关于git - Bash 在登录时检查 Git 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47266377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com