2012-09-02 5 views
3

J'ai codé Magento sites utilisant des tâches cron pour gérer les sauvegardes, mais il devient un peu maladroit lorsque vous essayez de revenir aux versions précédentes du site. Je dois essentiellement creuser à travers les sauvegardes et revenir manuellement les choses en arrière. J'ai lu sur git et j'aime l'idée d'être capable de documenter mes changements à travers le cycle de développement et de revenir aux choses spécifiques que je change avec quelques commandes.Processus de flux de travail Magento avec git

Actuellement, j'ai deux branches dans mon repo local (master, développer). Je fais essentiellement tout mon développement dans la branche de développement et fusionne tout à la branche maître quand j'en ai fini avec un ensemble spécifique de tâches et de pousser les choses à mon repo de gitbucket à des fins de sauvegarde et juste pour entrer dans l'habitude d'utiliser un repo à distance.

Je suis nouveau à git donc ce bruit suffit-il pour mon scénario ou quelqu'un peut-il recommander un bon processus de flux de travail pour un one man shop en utilisant git avec Magento? Merci.

Répondre

11

Nous utilisons le modèle GitFlow pour notre développement Magento. C'est similaire au vôtre mais avec une branche supplémentaire pour un site de mise en scène. De plus grandes tâches de développement/corrections sont également complétées dans des branches séparées pour s'assurer que le développement est toujours raisonnablement stable. Nos sites de transfert sont un repo git avec la branche de transfert extraite et les sites de production ont la branche master extraite. Lorsque nous sommes prêts à déployer des modifications sur la mise en scène, nous les fusionnons vers une mise en scène sur nos machines locales, puis nous envoyons le tout vers un repo Git central, puis nous tirons sur le serveur. Fonctionne bien, mais vous devez faire attention à app/etc/local.xml car cela devrait être différent dans chaque environnement. Vous voudrez également vous assurer que des choses telles que les dossiers médias et var ne finissent pas dans votre repo git.

Github publishes a .gitignore pour Magento, mais le problème que j'ai avec elle est qu'elle exclut tous les fichiers de base de Magento. Vous vous retrouvez avec un bon référentiel propre qui contient uniquement vos modifications, mais pas quelque chose qui est déployable. Nous utilisons un .gitignore beaucoup plus simple qui exclut simplement media var et app/etc/local.xml. Nous utilisons généralement une seule télécommande (par exemple Github) et déployons à partir de là. Sur les serveurs sur lesquels nous déployons, nous avons généralement un accès shell et git installé, donc le déploiement est une question de ssh et d'exécution d'un git pull (ou d'une fusion &) à partir de la télécommande normale.

Nous maintenons les sites de transfert en tant que branche distincte dans git, et les déployons de la même manière. Donc, notre processus ressemble à Développer dans une branche d'entité et fusionner en "développer" une fois terminé. Lorsque les tests d'intégration sont terminés, fusionnez "develop" (ou cerise-pick) à "staging" et déployer. Lorsque vous êtes prêt pour la production fusionner "staging" (ou cerise-cueillir des changements individuels) à la branche "maître". Ceci est essentiellement GitFlow, mais sur "la préparation pour la libération" branche est de longue durée. Comme l'indique le Sonassi tutorial lié dans les commentaires, le problème avec les médias symlink est que si vous supprimez un fichier multimédia de la production, vous obtenez un lien rompu dans le stockage intermédiaire et vice versa. Au lieu de relier les deux, nous mettons à jour le code de transfert depuis git, mais sinon, nous lançons les sites de transfert et de production séparément. Si nous avons besoin de nouvelles données dans la mise en scène, pour une raison quelconque, nous allons prendre une copie du support de production et de la base de données et la restaurer sur le site de transit.

Le modèle Gitflow utilise des numéros de version pour les étiquettes de version. Si vous disposez de numéros de version compatibles avec les versions, utilisez-les. Sinon, si vous avez une sorte de plan d'étape ou de système de sprint auquel vous travaillez et que vous pouvez identifier une version de cette façon, cela fonctionnera également. Si tout le reste échoue, nous utilisons la date/heure du déploiement. par exemple.

git tag -a deployed-`date +%Y%m%d-%H%M` -m "Code release at `date`" 
+0

Merci pour vos commentaires. J'ai utilisé ce fichier .gitignore https: // github.com/github/gitignore/blob/master/Magento.gitignore Peut-être que je vais aussi implémenter une branche de transfert. Avez-vous une configuration de serveur séparée comme une télécommande que vous poussez lorsque vous êtes prêt à tester sur cette branche? Aussi, comment copier les fichiers en production? Je n'ai pas installé git sur la machine de production, donc je ne peux pas le configurer comme une télécommande. Je sais que vous pouvez faire un crochet git mais je n'ai pas lu trop sur ce sujet. – ringerce

+0

Il ya des guides qui vous montrent comment configurer le déploiement FTP via un hook git, mais je n'ai pas utilisé une telle configuration à ce jour. –

+0

Merci Jim. Vous avez été d'une grande aide. J'ai installé git sur le serveur de production. Alors maintenant, je dois ssh dans le serveur de production et tirer le dernier tronçon stable (branche principale) sur le serveur de production et répétez le processus pour les prochaines versions? – ringerce