Migrando um script simples de atualização BASH do SVN para o GIT

3

Costumávamos manter nossa configuração do Nagios atualizada através do SVN, com os usuários confirmando suas alterações e um script sendo executado a cada 15 minutos. O script verificou as atualizações, depois verificou essas atualizações analisou a verificação de configuração e depois recarregou a configuração. Nice e simples, fez o trabalho perfeitamente.

Recentemente, nos mudamos para o GIT como parte de uma migração mais ampla em direção ao GIT para outros projetos, e estou com dificuldades para refazer esse script.

Aqui está a versão original do 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 -

E aqui estão meus melhores esforços até agora com o 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 -

O problema que estou tendo é que não consigo obter a saída parseable para que eu possa corresponder contra ele. Pensei em seguir um caminho diferente examinando o commit mais recente na cópia de trabalho local e, em seguida, verificando se o commit mais recente do remote era diferente. Eu não consigo descobrir como obter essa informação.

Sou muito novo no GIT e isso está me enlouquecendo, então meu grande obrigado antecipadamente por qualquer assistência!

    
por SimonJGreen 04.02.2013 / 00:05

4 respostas

3

Você pode verificar se a dica (a.k.a. HEAD) da ramificação local foi alterada antes e depois da extração.

cd /usr/local/nagios

before=$(git rev-parse HEAD)
git pull
after=$(git rev-parse HEAD)
if [[ $before != $after ]]; then
  service nagios reload
fi
    
por 04.02.2013 / 01:51
1

Se você quiser saber se há novas alterações para buscar, compare a saída dos seguintes comandos:

$ 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

Se os hashes forem diferentes, há alterações para buscar:

$ git remote update
Fetching origin
...
From github.com:xxxx/yyyy
5bad423..060bbe2  master     -> origin/master
    
por 04.02.2013 / 01:38
1

Você pode usar o post-merge hook, que será acionado somente quando houver uma mesclagem no lado do cliente e se não houver conflitos.

Conteúdo do post-merge :

#!/bin/bash

/etc/init.d/nagios reload

Copie o arquivo em .git/hooks no lado do cliente e não se esqueça de chmod u+x post-merge

    
por 04.02.2013 / 01:22
-1

Use as somas de verificação exibidas por git log . Por exemplo:

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 -
    
por 04.02.2013 / 00:30

Tags