Si je comprends bien votre problème, vous voulez les choses suivantes:
- Ayez vos fichiers multimédias stockés dans un seul référentiel git, qui est utilisé par de nombreux projets
- Si vous modifiez un fichier multimédia dans l'un des projets de votre machine locale, il devrait apparaître immédiatement dans tous les autres projets (donc vous ne voulez pas valider + pousser + tirer tout le temps)
Malheureusement, il n'y a pas de solution ultime pour ce que vous voulez, mais il y a certaines choses qui peuvent vous faciliter la vie.
Vous devez d'abord décider d'une chose importante: voulez-vous stocker pour chaque version dans votre référentiel de projet une référence à la version des fichiers multimédias? Ainsi, par exemple, si vous avez un projet appelé example.com, avez-vous besoin de savoir quel style.css il a utilisé il y a 2 semaines, ou la dernière est toujours (ou surtout) la meilleure?
Si vous n'avez pas besoin de le savoir, la solution est simple:
- créer un référentiel pour les fichiers multimédias et un pour chaque projet
- créez un lien symbolique dans vos projets qui pointe vers le référentiel multimédia cloné localement. Vous pouvez soit créer un lien symbolique relatif (par exemple ../media) et supposer que tout le monde va extraire le projet afin que le répertoire multimédia soit au même endroit, ou écrire le nom du lien symbolique dans .gitignore, et tout le monde peut décider où il place les fichiers multimédias.
Dans la plupart des cas, cependant, vous souhaitez connaître ces informations de version. Dans ce cas, vous avez deux choix:
Stockez chaque projet dans un grand référentiel. L'avantage de cette solution est que vous n'aurez qu'une seule copie du référentiel multimédia. Le gros inconvénient est qu'il est beaucoup plus difficile de basculer entre les versions de projet (si vous passez à une version différente, vous modifierez toujours TOUS les projets)
Utilisez des sous-modules (comme expliqué dans la réponse 1). De cette façon, vous stockerez les fichiers multimédias dans un référentiel et les projets ne contiendront qu'une référence à une version spécifique du référentiel multimédia. Mais de cette façon, vous aurez normalement de nombreuses copies locales du référentiel multimédia et vous ne pourrez pas facilement modifier un fichier multimédia dans tous les projets.
Si j'étais vous, je choisirais probablement la première ou la troisième solution (liens symboliques ou sous-modules). Si vous choisissez d'utiliser des sous-modules, vous pouvez toujours faire beaucoup de choses pour vous faciliter la vie:
Avant de vous engager, vous pouvez renommer le répertoire du sous-module et mettre un lien symbolique vers un répertoire multimédia commun. Lorsque vous êtes prêt à valider, vous pouvez supprimer le lien symbolique et supprimer le sous-module, puis valider.
Vous pouvez ajouter une de vos copies du référentiel multimédia en tant que référentiel distant à tous vos projets.
Vous pouvez ajouter des répertoires locaux en tant que télécommande de cette façon:
cd /my/project2/media
git remote add project1 /my/project1/media
Si vous modifiez un fichier dans / my / project1 / media, vous pouvez le valider et le retirer de / my / project2 / media sans le pousser vers un serveur distant:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Vous êtes libre de supprimer ces commits plus tard (avec git reset) car vous ne les avez pas partagés avec d'autres utilisateurs.