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.


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í.


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


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

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.