Installer des modules Magento grâce à modgit

Quand on développe des modules Magento, il est assez fastidieux de créer des packages pour Magento Connect. C’est pourquoi il y a souvent des modules qui ne sont pas présents dans celui-ci mais qui sont disponibles ailleurs, sur GitHub par exemple. Je vais vous présenter ici un moyen très rapide d’installer des modules Magento disponibles sur des dépôts Git grâce à modgit.

Présentation de modgit

modgit (pour Module Git) n’est ni plus ni moins qu’un script shell permettant de cloner un dépôt Git et de déployer le code dans votre projet. Directement inspiré du très bon modman, modgit a l’avantage de pouvoir inclure ou exclure une partie du dépôt et de ne pas créer des liens symboliques mais de copier physiquement les fichiers dans votre projet.

Pré-requis

  • bash
  • git

Installation de modgit

modgit est disponible sur GitHub : https://github.com/jreinke/modgit. Une fois téléchargé :

$ cp /path/to/modgit /usr/local/bin # ou tout autre dossier dans $PATH
$ cd /usr/local/bin
$ chmod +x modgit

Installation d’un module Magento avec modgit

Pour notre exemple, nous allons installer l’excellent module PHPUnit pour Magento développé par Ivan Chepurnyi et disponible sur GitHub : https://github.com/IvanChepurnyi/EcomDev_PHPUnit.
Voici la procédure :

$ cd /path/to/magento
$ modgit init
$ modgit clone ecomdev-phpunit https://github.com/IvanChepurnyi/EcomDev_PHPUnit.git

Et c’est tout ! Le code est déployé sur votre arborescence Magento comme ceci :

Il ne vous reste plus qu’à vider le cache pour que le module soit installé dans Magento.

Remarque : on peut voir que des fichiers ont été déployés à la racine de l’arborescence et qui ne sont pas nécessaires au fonctionnement du module. On verra un peu plus loin comment les exclure lors de l’installation.

Mettre à jour les modules installés

Avec modgit, vous pouvez mettre à jour un module spécifique ou bien tous les modules d’un coup.

Mettre à jour un module :

$ modgit update <module>

Mettre à jour tous les modules :

$ modgit update-all

Lister les modules installés

$ modgit list

Supprimer un module

$ modgit remove <module>

Utilisation avancée

L’un des avantages de modgit, c’est de pouvoir inclure ou exclure les fichiers et dossiers de votre choix. Si on reprend notre exemple plus haut, tous les fichiers du dépôt EcomDev_PHPUnit ont été copiés dans notre arborescence Magento et on se retrouve avec des fichiers indésirables à la racine de cele-ci. Pour exclure les fichiers LICENSE.txt, README.md et modman, il suffit de les exclure comme ci-dessous lors de l’installation :

$ modgit -e LICENSE.txt -e README.md -e modman clone ecomdev-phpunit https://github.com/IvanChepurnyi/EcomDev_PHPUnit.git

Pour inclure uniquement une partie du dépôt, le fonctionnement est le même, il suffit de spécifier la liste des fichiers/dossiers à l’aide de l’option -i.

Conclusion

modgit vous donne donc la possibilité d’installer, de mettre à jour et de supprimer rapidement n’importe quel module Magento disponible sur un dépôt Git. Il se révèle donc très utile si vous souhaitez tester rapidement un module, si un module n’est pas disponible sur Magento Connect ou bien si tout simplement vous êtes un peu allergique à ce dernier ;).

22 réponses à “Installer des modules Magento grâce à modgit”

  1. Yuriy dit :

    windows version of BASH does not support constructions like:

    ==============
    while read line; do

    done < /dev/null)
    ==============

    so we have to change it to

    ==============
    cat « $deployed_file » 2>/dev/null | while read line; do

    done
    ==============

    also the next change is:

    echo « $(tput bold)$1$(tput sgr0) » => echo « $1″ (row 90)

  2. Jimmysessions dit :

    Is there a way to only include a sub dir?

    lets say the repo looked like

    +src
    +–app
    +—-code

    and all I wanted was the app dir?

  3. Awesome tool!
    Also thanks for using our unit tests extension! :)

  4. Claudio dit :

    Modgit really is a perfect fit for handling mangento modules but I had no luck getting it to run on windows. I’ve tried cygwin, win-bash but to no avail. It seems like Yuriy got it just right but I have no idea how. Can someone please elaborate on how to get this to work on windows? Thanks!

  5. Igor dit :

    What happens if I change files of a module and then update? It will merge versions or overwrite my changes?

  6. Francisco dit :

    Hi Johann, awesome stuff, unfortunately our clients dont have real knowledge about shell or command line tools

    It would be great if you could update from within Magento admin user interface and upload update are url to update file with a click of a button.

  7. Yop dit :

    Salut,

    Est-ce que tu as déjà essayé d’appeler modgit via un hook de Git ? J’ai tenté mais sans succès pour le moment… J’ai simplement rajouté ça dans le post-receive :

    #!/bin/sh
    cd /path/to/magento
    modgit up MonModule

    si j’exécute le fichier post-receive à la main ça fonctionne mais en passant depuis un push Local => Remote, rien ne se passe. Si tu as une idée, je suis preneur. Un grand merci pour Modgit !

  8. Yohan dit :

    Hi Johan

    I’ve got an error using modgit on mac OSX 10.8. I always got this error :
    ./modgit clone [email protected]:jreinke/magento-elasticsearch.git
    ERROR: You cannot add a module with a name not matching [^a-zA-Z0-9_-]+ pattern
    Module specified: [email protected]:jreinke/magento-elasticsearch.git

    Is their any issues ?

    thx, Yohan

  9. Ela dit :

    When i tried to init the modgit

    [[email protected] magentosample]# modgit init
    -bash: /usr/local/bin/modgit: /bin/bash^M: bad interpreter: No such file or directory

    Am getting this error, though i downloaded and copied the file with execute permission into /usr/local/bin/

  10. Mike dit :

    Hey. Nice and interesting article. Did anyone get it run on windows? I try to modify the script like yuriy recommend above but i’m still getting errors.

  11. Jeff dit :

    Hello Johann,

    Thanks very much for modgit, it looks to be very useful.

    However, I found that when I used it to clone the current EcomDev_PHPUnit, these files are not deployed and not listed in the ‘modgit files’ output.:
    app/etc/local.xml.phpunit
    app/etc/modules/EcomDev_PHPUnit.php
    app/etc/modules/EcomDev_PHPUnitTest.php
    shell/ecomdev-phpunit.php

    What am I doing wrong?

    FYI the full command I used was:
    modgit add -e .gitignore -e .gitmodules -e LICENSE.txt -e README.md -e modman -e composer.json -b dev EcomDev https://github.com/EcomDev/EcomDev_PHPUnit.git

    • Jeff dit :

      My guess is there is a problem with the modman file parser. The only files that are not deployed by modgit are files that match a modman line with a filter containing « *.{something} ».

      EcomDev_PHPUnit’s modman file is:
      >>>
      app/etc/modules/*.xml app/etc/modules/
      app/code/community/EcomDev/* app/code/community/EcomDev/
      lib/EcomDev/* lib/EcomDev/
      lib/Spyc lib/Spyc
      lib/vfsStream lib/vfsStream
      shell/*.php shell/
      << line= »${line/\*/} » # remove * char

      Which means the comparison on line 339 of:
      > if [[ "$file" =~ ^$1 ]]

      will fail in these cases as it will evaluate to something like:
      > if [[ "app/etc/local.xml.phpunit" =~ "app/etc/modules/.xml" ]]

      Unfortunately I’m not good enough at bash to code a fix :(

      • Jeff dit :

        Gah! I messed up the formatting ..

        The problem happens when the modman file’s filter expression ends with « *{something} », like « app/etc/modules/*.xml ».

        Line 337 of modgit is:
        > line=”${line/\*/}” # remove * char

        Which means the comparison on line 339 of:
        > if [[ "$file" =~ ^$1 ]]

        will fail in these cases as it will evaluate to something like:
        > if [[ "app/etc/local.xml.phpunit" =~ "app/etc/modules/.xml" ]]

  12. Alex dit :

    modgit gives you the ability to install, update and remove quickly any Magento module available on a Git repository. It is therefore very useful if you want to quickly test a module,
    > it’s only for install and remove? Can I modify and update modules?

    Why, when I modified ./.modgit/module/source/app/module/controller.php, and did
    modgit update-all
    It’s not updated in ./app/module/controller.php ?

  13. JJ dit :

    >modgit has the advantage of including or excluding a portion of the repository and not to create symlinks but physically copy the files into your project
    I’m sorry, what’s the _advantage_?

Laisser un commentaire

* Champs requis

Categories