Si entiendo bien su problema que quieren las siguientes cosas:
- haya guardado sus archivos multimedia en un repositorio git única, que es utilizado por muchos proyectos
- Si modifica un archivo multimedia en cualquiera de los proyectos en su máquina local, debe aparecer inmediatamente en cualquier otro proyecto (por lo que no desea confirmar + presionar + jalar todo el tiempo)
Desafortunadamente no hay una solución definitiva para lo que quieras, pero hay algunas cosas por las cuales puedes hacer tu vida más fácil.
Primero debe decidir una cosa importante: ¿desea almacenar para cada versión en su repositorio de 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 sobre todo) el mejor?
Si no necesita saber que, la solución es fácil:
- crear un repositorio para los archivos multimedia y uno para cada proyecto
- crear un enlace simbólico en sus proyectos que apuntan a el repositorio de medios clonado localmente. Puede crear un enlace simbólico relativo (por ej. ../media) y asumir que todos verificarán el proyecto para que el directorio de medios esté en el mismo lugar, o escriban el nombre del enlace simbólico en .gitignore, y todos pueden decidir donde él/ella pone los archivos multimedia.
En la mayoría de los casos, sin embargo, desea conocer esta información de versión. En este caso, tiene dos opciones:
Almacene cada proyecto en un gran repositorio. La ventaja de esta solución es que solo tendrá 1 copia del depósito de medios. La gran desventaja es que es mucho más difícil cambiar entre versiones de proyecto (si realiza el pago en una versión diferente, siempre modificará TODOS los proyectos)
Use los submódulos (como se explica en la respuesta 1). De esta manera, almacenará los archivos multimedia en un repositorio, y los proyectos contendrán solo una referencia a una versión específica de repo de medios. Pero de esta manera normalmente tendrá muchas copias locales del repositorio de medios, y no podrá modificar fácilmente un archivo multimedia en todos los proyectos.
Si yo fuera usted, probablemente elegiría la primera o la tercera solución (enlaces simbólicos o submódulos). Si decide usar submódulos todavía se pueden hacer muchas cosas para hacer la vida más fácil:
Antes de comprometerse puede cambiar el nombre del directorio submódulo y poner un enlace simbólico a un directorio de medios comunes. Cuando esté listo para comprometerse, puede eliminar el enlace simbólico y eliminar el submódulo, y luego confirmar.
Puede agregar una de sus copias del depósito de medios como repositorio remoto a todos sus proyectos.
Puede agregar directorios locales como un control remoto de esta manera:
cd /my/project2/media
git remote add project1 /my/project1/media
Si modifica un archivo en/mi/proyecto 1/medios, puede comprometerse y tire de ella desde/mi/project2/media sin empujarla a un servidor remoto:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
que son libres para eliminar estas confirmaciones más tarde (con git reset), ya que no los ha compartido con otros usuarios.
Este flujo de trabajo me recuerda el uso de un módulo privado de NPM http://stackoverflow.com/questions/7575627/can-you-host-a-private-repository-for-your-organization-to-use-with- npm # answer-7807279 – cyrf
Si prefiere que la versión predeterminada sea la última, puede agregar una secuencia de comandos para propagar la confirmación de MEDIA a todos los proyectos dependientes. – jiggunjer
¿Cómo se integra esto con github? – theonlygusti