Comment ignorer les liens symboliques sur un module Magento installé par le compositeur

11

J'installe des modules en utilisant composer.phar.

Cela crée des fichiers de liens symboliques dans publichtml/app/code/community(par exemple) avec une cible vers vendor/themodule....

Dans mon, .gitignorej'ai exclu le répertoire des fournisseurs - mais les liens finiraient bien sûr dans le git.

Existe-t-il un moyen simple d'exclure automatiquement ces liens? (autre que l'ajout manuel de tout au .gitignore)

Je dois dire que j'ai quelques require-devmodules qui ne devraient pas se retrouver sur le serveur final - donc avoir ces liens là-bas ne serait au moins pas très agréable.

Alex
la source
1
Cela s'appliquerait-il également à Modman?
philwinkle
Avec modman, vous utilisez généralement des sous-modules git pour chaque extension et ajoutez simplement les liens symboliques au référentiel. Pas besoin de les exclure là-bas, au contraire, cela n'aurait pas de sens dans un scénario de déploiement modman principalement.
Vinai
1
@philwinkle J'ai récemment commencé à suivre la racine Magento dans un référentiel séparé pour des raisons de sécurité (par exemple, détecter facilement les fichiers modifiés), pour suivre les modifications apportées à index.php et Mage.php, et pour des mises à niveau de Magento plus faciles, donc tout aussi pertinentes pour Modman, IMO .
ColinM

Réponses:

8

Le meilleur que j'ai trouvé a été de l'exécuter après une installation / mise à jour du compositeur

$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore

La commande doit être exécutée dans le répertoire racine git. Il ajoute tous les liens symboliques au fichier .gitignore qui ne s'y trouvent pas déjà.

Vinai
la source
cela génère un chemin comme ./foo/bar... Je pense que nous devons supprimer le premier .- cela a-t-il fonctionné pour vous comme ça?
Alex
Fonctionne bien pour moi avec le leader ., oui. Sinon à la rescousse:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai
En fait, cela rompt la grep ... eh bien, peut-être qu'il existe un bon moyen de nettoyer le chemin de toute façon ...
Vinai
1
Solution simple: find * .... Va mettre à jour ma réponse.
Vinai
3

Cette méthode n'ajoute que des liens symboliques non suivis et peut donc être répétée sans ajouter des entrées en double, des liens symboliques qui sont dans des sous-modules ou qui sont déjà déjà ignorés ou des liens symboliques intentionnellement suivis.

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore;
    test -d "$f" && echo $f\* >> .gitignore;
done
ColinM
la source
1

La solution combinée de @ColinM et @Vinai qui fonctionne pour moi

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    if test -L "$f"
    then
        test -L "$f" && echo $f >> .gitignore;
    elif test -d "$f"
    then
        find ${f%/} -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
    fi
done
martin_mageworx
la source
Avez-vous remarqué que les programmes d'installation récents de Composer excluent automatiquement les liens symboliques?
Alex
Bien sûr, mais certains de mes projets ne sont pas sous le contrôle du compositeur. Et les solutions fournies ici ne sont pas seulement pour les projets de compositeur mais pour ignorer complètement les liens symboliques. J'espère que cela aidera quelqu'un
martin_mageworx