3 votes

Migration d'une simple mise à jour BASH script de SVN à GIT

Nous avions l'habitude de maintenir notre configuration Nagios à jour via SVN, avec des utilisateurs qui commettaient leurs changements et un script exécuté toutes les 15 minutes. Le script vérifiait les mises à jour, puis vérifiait ces mises à jour analysait la vérification de la configuration, puis rechargeait la configuration. Agréable et simple, il fait parfaitement son travail.

Nous sommes récemment passés à GIT dans le cadre d'une migration plus large vers GIT pour d'autres projets et j'ai des difficultés à retravailler ce script pour qu'il corresponde.

Voici la version SVN originale :

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

Et voici mes meilleurs efforts jusqu'à présent avec 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 -

Le problème que j'ai, c'est que je n'arrive pas à rendre la sortie analysable pour pouvoir la comparer. J'ai pensé à emprunter une voie différente en examinant le commit le plus récent dans la copie de travail locale, puis en vérifiant si le commit le plus récent distant était différent. Je n'arrive cependant pas à trouver comment obtenir cette information.

Je suis assez novice en matière de GIT et cela me rend fou, alors je vous remercie d'avance pour toute aide.

3voto

chutz Points 7404

Vous pouvez vérifier si l'extrémité (a.k.a. HEAD) de la branche locale a changé avant et après le tirage.

cd /usr/local/nagios

before=$(git rev-parse HEAD)
git pull
after=$(git rev-parse HEAD)
if [[ $before != $after ]]; then
  service nagios reload
fi

1voto

golja Points 1591

Vous pourriez utiliser le post-merge qui ne se déclenchera que lorsqu'il y aura une fusion du côté client et s'il n'y a pas de conflits.

Contenu de la post-merge :

#!/bin/bash

/etc/init.d/nagios reload

Copiez le fichier dans .git/hooks du côté client et n'oubliez pas de chmod u+x post-merge

1voto

nickgrim Points 4236

Si vous voulez savoir s'il y a de nouvelles modifications à récupérer, vous pouvez comparer les résultats des commandes suivantes :

$ 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

Si les hachages diffèrent, il y a des changements à récupérer :

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

-1voto

Ichimonji10 Points 1

Utilisez les sommes de contrôle affichées par git log . Par exemple :

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 -

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X