Cómo Git-Ignorar enlaces simbólicos en un módulo Magento instalado por el compositor
Pregunta
instalar módulos usando composer.phar
.
Esto crea enlaces simbólicos en los archivos publichtml/app/code/community
(por ejemplo) con el objetivo de vendor/themodule...
.
En mi .gitignore
que excluye el directorio de proveedores - pero los enlaces sería, por supuesto, aún así terminar en el GIT
¿Hay un fácil manera de automically excluyen esos enlaces? (Aparte de la adición de todo manualmente a la .gitignore)
Tengo que decir que tengo algunos módulos require-dev
que no debe terminar en el servidor final -. Por lo que tener esos enlaces que habría por lo menos no tan agradable
Solución
Lo mejor que se me ocurrió fue correr esto después de un compositor instalar / actualizar
$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
El comando se debe ejecutar en el directorio raíz git. Añade todos los enlaces simbólicos en el archivo .gitignore que no están en allí ya.
Otros consejos
Este método sólo añade enlaces simbólicos sin seguimiento lo que puede ser repetidas sin añadir entradas duplicadas, enlaces simbólicos que están en submódulos o son de otra manera ya ignorados, o intencionalmente rastreados enlaces simbólicos.
for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
test -L "$f" && echo $f >> .gitignore;
test -d "$f" && echo $f\* >> .gitignore;
done
Hoy en día hay una opción para esto en el instalador compositor. Sólo hay que establecer extra.auto-add-archivos-a-gitignore https://github.com/magento-hackathon/magento-composer-installer/blob/master/README.md#auto-add-files-to-gitignore
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