Si entiendo bien tu problema, quieres lo siguiente:
- Tenga sus archivos multimedia almacenados en un único repositorio git, que es utilizado por muchos proyectos
- Si modifica un archivo multimedia en cualquiera de los proyectos en su máquina local, debería aparecer inmediatamente en cualquier otro proyecto (por lo que no desea comprometerse + empujar + jalar todo el tiempo)
Desafortunadamente, no hay una solución definitiva para lo que desea, pero hay algunas cosas con las que puede facilitarle la vida.
Primero debe decidir una cosa importante: ¿desea almacenar para cada versión en el repositorio de su proyecto una referencia a la versión de los archivos multimedia? Entonces, por ejemplo, si tiene un proyecto llamado example.com, ¿necesita saber qué style.css usó hace 2 semanas, o el último es siempre (o mayormente) el mejor?
Si no necesita saber eso, la solución es fácil:
- crear un repositorio para los archivos multimedia y uno para cada proyecto
- cree un enlace simbólico en sus proyectos que apunte al repositorio de medios clonado localmente. Puede crear un enlace simbólico relativo (por ejemplo, ../media) y asumir que todos verificarán el proyecto para que el directorio de medios esté en el mismo lugar, o escribir el nombre del enlace simbólico en .gitignore, y todos podrán decidir donde él / ella pone los archivos multimedia.
Sin embargo, en la mayoría de los casos, desea conocer esta información de versiones. En este caso tienes dos opciones:
Almacene cada proyecto en un gran repositorio. La ventaja de esta solución es que solo tendrá 1 copia del repositorio de medios. La gran desventaja es que es mucho más difícil cambiar entre versiones de proyecto (si realiza el pago a una versión diferente, siempre modificará TODOS los proyectos)
Use submódulos (como se explica en la respuesta 1). De esta manera, almacenará los archivos de medios en un repositorio, y los proyectos contendrán solo una referencia a una versión específica de repositorio de medios. Pero de esta manera normalmente tendrá muchas copias locales del repositorio de medios, y no puede modificar fácilmente un archivo de medios en todos los proyectos.
Si yo fuera usted, probablemente elegiría la primera o tercera solución (enlaces simbólicos o submódulos). Si elige usar submódulos, aún puede hacer muchas cosas para facilitarle la vida:
Antes de comprometerse, puede cambiar el nombre del directorio de submódulos y poner un enlace simbólico a un directorio de medios común. Cuando esté listo para confirmar, puede eliminar el enlace simbólico y eliminar el submódulo de nuevo, y luego confirmar.
Puede agregar una de sus copias del repositorio de medios como un repositorio remoto a todos sus proyectos.
Puede agregar directorios locales como remotos de esta manera:
cd /my/project2/media
git remote add project1 /my/project1/media
Si modifica un archivo en / my / project1 / media, puede confirmarlo y extraerlo de / my / project2 / media sin enviarlo a un servidor remoto:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Puede eliminar estas confirmaciones más tarde (con git reset) porque no las ha compartido con otros usuarios.