Modifications Push planifiées dans le référentiel Git local (Ubuntu)

2

Fond ennuyeux - Résumé: Je sais que nous n'utilisons pas correctement GIT! .
Cela a commencé comme un petit projet de loisir et a pris de l'ampleur - ma société utilise Git pour suivre / gérer les modifications apportées à une plate-forme logicielle sur mesure basée sur le Web et servir de référentiel central. Environ 300 appareils mobiles sont ensuite configurés pour accéder à un référentiel cloné local au démarrage à partir d’un serveur intranet auto-hébergé afin de pouvoir accéder à la dernière version du logiciel même s’ils ne sont pas connectés au réseau (nous utilisons des branches sont uniquement exposés à du code mature / testé).

Nous avons maintenant franchi une étape: nous avons une base de données de "pièces" mise à jour quotidiennement. J'ai créé une version distincte de cette base de données à l'aide de scripts cron pour créer une version autonome pouvant être ouverte sur une "machine non connectée" locale.

Mon problème
J'ai un ensemble de scripts PHP qui prennent des données de table de base de données et les exportent dans le format de fichier plat requis par l'application, puis copient toutes les images supplémentaires depuis le dernier cycle aux emplacements appropriés. Tous les fichiers sont stockés dans/var/www/clonedrepository

Je veux ensuite exécuter les commandes suivantes sur le répertoire:

git add .
git commit -m "Automatic update: todaysdate"
git push

Le référentiel est cloné à partir /home/git/repositoryduquel est servi à l’aide des liens symboliques git deamon et apache permettant l’accès http (pour le clonage de périphérique passif) et SSH (pour l’édition adulte / la mise à jour).

Le problème est que je suis un programmeur Web et que je suis hors de propos. J'ai mis en place les dépôts git et je suis à l'aise avec la ligne de commande, mais je ne connais pas le meilleur endroit pour commencer.

Note latérale: Il n'y aura jamais de conflits car aucun utilisateur ne modifiera les fichiers de données et le système n'éditera rien d'autre que les fichiers de données.

En résumé , j'ai un référentiel central sur ma machine Ubuntu Linux ( /home/git/repository) que je voudrais mettre à jour quotidiennement à partir d'un référentiel cloné ( /var/www/clonedrepository) sur la même boîte.

kieran_delaney
la source

Réponses:

2

OK, alors j'ai travaillé ça moi-même ...

1) J'ai mis en place un script contenant les lignes suivantes:

cd /var/www/partsdb/ >> /home/git/push.log
git pull >> /home/git/push.log
git add . >>/home/git/push.log
git commit -a -m "Scheduled Commit: `date`" >>/home/git/push.log
git push >> /home/git/push.log
echo "Push Backup Successful `date`" >> /home/git/push.log

Ce script passe dans le référentiel de travail, extrait les modifications éventuelles du référentiel central (ces modifications n’affecteront que les fichiers programme, pas les fichiers de données), ajoutera les fichiers de données modifiés (stockés dans un /datasous-répertoire pour plus de clarté), valideront les modifications (y compris un message automatique basé sur la date pour suivre les modifications / blâmes) puis est renvoyé au référentiel.

EDIT: J'ai depuis ajouté l' -aindicateur à la commande commit, qui supprimera ensuite les fichiers supprimés par les scripts de mise à jour automatique ( add .ajout de nouveaux fichiers). [/MODIFIER]

2) J'appelle ce script depuis crontab, en l'exécutant en tant que root (en tant que root, seul l'utilisateur est autorisé à écrire dans le dossier personnel de git et dans le dossier / var / www) à l'aide de la commande suivante:

0 * * * * root /home/git/gitpush.sh

Le script s'exécute toutes les heures. Les périphériques mobiles isolés ne seront extraits de la base de données qu'au démarrage (quotidien / matin). Les utilisateurs du réseau local disposeront toujours de la version la plus récente (transmise à la branche principale).

kieran_delaney
la source
Je soupçonne qu’il existe peut-être une méthode plus propre / ordonnée d’exécuter le script, peut-être pas en tant que root ou en n’utilisant pas crontab, mais c’est ainsi que j’ai répondu à ma propre question. Les suggestions sont toujours les bienvenues.
kieran_delaney