Cómo ignorar los enlaces simbólicos en un módulo Magento instalado por el compositor

11

Instalo módulos usando composer.phar.

Esto crea archivos de enlaces simbólicos en publichtml/app/code/community(por ejemplo) con un destino para vendor/themodule....

En mi .gitignore, excluí el directorio de proveedores, pero los enlaces, por supuesto, terminarían en el git.

¿Hay una manera fácil de excluir automáticamente esos enlaces? (aparte de agregar todo manualmente a .gitignore)

Tengo que decir que tengo algunos require-devmódulos que no deberían terminar en el servidor final, por lo que tener esos enlaces al menos no sería tan bueno.

Alex
fuente
1
¿Esto también se aplicaría a modman?
philwinkle
Con modman, generalmente usaría submódulos git para cada extensión y simplemente agregaría los enlaces simbólicos al repositorio. No es necesario excluirlos allí, por el contrario, no tendría sentido en un escenario de implementación de modman principalmente.
Vinai
1
@philwinkle Recientemente comencé a rastrear la raíz de Magento en un repositorio separado por razones de seguridad (p. ej., detectar fácilmente archivos modificados), rastrear cambios en index.php y Mage.php, y para actualizaciones más fáciles de Magento, tan definitivamente relevantes para modman también, IMO .
ColinM

Respuestas:

8

Lo mejor que se me ocurrió fue ejecutar esto después de una instalación / actualización del compositor

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

El comando debe ejecutarse en el directorio raíz de git. Agrega todos los enlaces simbólicos al archivo .gitignore que aún no están allí.

Vinaí
fuente
esto genera un camino como ./foo/bar... Creo que tenemos que eliminar el primero ., ¿funcionó así para usted?
Alex
Funciona bien para mí con el líder ., sí. Else sed al rescate:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai
En realidad, eso rompe el grep ... bueno, tal vez hay una buena manera de limpiar el camino de todos modos ...
Vinai
1
Una solución simple: find * .... Actualizaré mi respuesta.
Vinai
3

Este método solo agrega enlaces simbólicos sin seguimiento, por lo que puede repetirse sin agregar entradas duplicadas, enlaces simbólicos que están en submódulos o que de otra manera ya se ignoraron, o enlaces simbólicos con seguimiento intencional.

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

La solución combinada de @ColinM y @Vinai que funciona para mí

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
fuente
¿Notaste que los instaladores de compositores recientes excluyen automáticamente los enlaces simbólicos?
Alex
Claro, pero algunos de mis proyectos no están bajo el control del compositor. Y las soluciones proporcionadas aquí no son solo para proyectos de compositores sino para ignorar los enlaces simbólicos por completo. Espero que ayude a alguien
martin_mageworx 02 de