AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 475040
Accepted
SimonJGreen
SimonJGreen
Asked: 2013-02-04 15:05:08 +0800 CST2013-02-04 15:05:08 +0800 CST 2013-02-04 15:05:08 +0800 CST

将一个简单的 BASH 更新脚本从 SVN 迁移到 GIT

  • 772

我们过去常常通过 SVN 使我们的 Nagios 配置保持最新,用户提交他们的更改并且脚本每 15 分钟运行一次。脚本检查更新,然后检查这些更新解析配置检查,然后重新加载配置。漂亮而简单,完美地完成了工作。

我们最近迁移到 GIT 作为其他项目更广泛迁移到 GIT 的一部分,我很难重新编写这个脚本来匹配。

这是原始的 SVN 版本:

cd /usr/local/nagios
RESULT=`svn update | grep Updated | wc -l`
echo $RESULT
if [ "$RESULT" != "0" ]; then
    /etc/init.d/nagios reload
fi
cd -

这是我迄今为止对 GIT 所做的最大努力:

cd /usr/local/nagios
RESULT=`git pull 2>&1 | grep Unpacking | wc -l`
echo $RESULT
if [ "$RESULT" != "0" ]; then
    /etc/init.d/nagios reload
fi
cd -

我遇到的问题是我似乎无法使输出可解析,因此我无法对其进行匹配。我想通过检查本地工作副本中的最新提交来走一条不同的路线,然后检查远程最近的提交是否不同。我不知道如何获取此信息。

我是 GIT 的新手,这让我发疯,所以我非常感谢您提供的任何帮助!

bash
  • 4 4 个回答
  • 350 Views

4 个回答

  • Voted
  1. Best Answer
    chutz
    2013-02-04T16:51:10+08:002013-02-04T16:51:10+08:00

    您可以检查本地分支的提示(又名 HEAD)在拉动前后是否发生变化。

    cd /usr/local/nagios
    
    before=$(git rev-parse HEAD)
    git pull
    after=$(git rev-parse HEAD)
    if [[ $before != $after ]]; then
      service nagios reload
    fi
    
    • 3
  2. golja
    2013-02-04T16:22:11+08:002013-02-04T16:22:11+08:00

    您可以使用post-merge挂钩,只有在客户端有合并并且没有冲突时才会触发。

    的内容post-merge:

    #!/bin/bash
    
    /etc/init.d/nagios reload
    

    将文件复制到.git/hooks客户端,不要忘记chmod u+x post-merge

    • 1
  3. nickgrim
    2013-02-04T16:38:22+08:002013-02-04T16:38:22+08:00

    如果想知道fetch是否有新变化,可以对比以下命令的输出:

    $ git show-ref origin/master     # <-- Where this repo thinks "origin/master" is
    5bad423ae8d9055d989a66598d3c4473dbe97f8f refs/remotes/origin/master
    $ git ls-remote origin master    # <-- Where "origin" thinks "master" is
    060bbe2125ec5e236a6c6eaed2e715b0328a9106    refs/heads/master
    

    如果哈希值不同,则需要更改:

    $ git remote update
    Fetching origin
    ...
    From github.com:xxxx/yyyy
    5bad423..060bbe2  master     -> origin/master
    
    • 1
  4. Ichimonji10
    2013-02-04T15:30:29+08:002013-02-04T15:30:29+08:00

    使用 显示的校验和git log。例如:

    cd /usr/local/nagios
    git fetch
    if [ "$(git log | head -n 1)" != "$(git log origin | head -n 1)" ]; then
        git pull
        /etc/init.d/nagios reload
    fi
    cd -
    
    • -1

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve