Se capisco bene il tuo problema, vuoi le seguenti cose:
- Conserva i tuoi file multimediali in un unico repository git, utilizzato da molti progetti
- Se modifichi un file multimediale in uno qualsiasi dei progetti nel tuo computer locale, dovrebbe apparire immediatamente in ogni altro progetto (quindi non vuoi impegnarti + push + pull tutto il tempo)
Sfortunatamente non esiste una soluzione definitiva per quello che vuoi, ma ci sono alcune cose per cui puoi semplificarti la vita.
Per prima cosa dovresti decidere una cosa importante: vuoi archiviare per ogni versione nel repository del tuo progetto un riferimento alla versione dei file multimediali? Ad esempio, se hai un progetto chiamato esempio.com, devi sapere quale style.css ha usato 2 settimane fa o l'ultimo è sempre (o principalmente) il migliore?
Se non è necessario saperlo, la soluzione è semplice:
- creare un repository per i file multimediali e uno per ciascun progetto
- creare un collegamento simbolico nei progetti che punta al repository multimediale clonato localmente. Puoi creare un relativo link simbolico (es. ../Media) e supporre che tutti controlleranno il progetto in modo che la directory media sia nello stesso posto, o scrivere il nome del link simbolico in .gitignore, e tutti possono decidere dove mette i file multimediali.
Nella maggior parte dei casi, tuttavia, si desidera conoscere queste informazioni sul controllo delle versioni. In questo caso hai due scelte:
Archivia ogni progetto in un grande repository. Il vantaggio di questa soluzione è che avrai solo 1 copia del repository multimediale. Il grande svantaggio è che è molto più difficile passare da una versione all'altra del progetto (se si effettua il checkout a una versione diversa, si modificheranno sempre TUTTI i progetti)
Usa i sottomoduli (come spiegato nella risposta 1). In questo modo memorizzerete i file multimediali in un repository e i progetti conterranno solo un riferimento a una versione specifica del repository multimediale. Ma in questo modo normalmente avrai molte copie locali del repository multimediale e non potrai facilmente modificare un file multimediale in tutti i progetti.
Se fossi in te probabilmente sceglierei la prima o la terza soluzione (collegamenti simbolici o sottomoduli). Se scegli di utilizzare i sottomoduli puoi comunque fare molte cose per semplificarti la vita:
Prima di eseguire il commit è possibile rinominare la directory del sottomodulo e inserire un collegamento simbolico a una directory multimediale comune. Quando sei pronto per eseguire il commit, puoi rimuovere il link simbolico e rimuovere nuovamente il sottomodulo, quindi eseguire il commit.
Puoi aggiungere una delle tue copie del repository multimediale come repository remoto a tutti i tuoi progetti.
È possibile aggiungere directory locali come telecomando in questo modo:
cd /my/project2/media
git remote add project1 /my/project1/media
Se modifichi un file in / my / project1 / media, puoi eseguirne il commit ed estrarlo da / my / project2 / media senza inviarlo a un server remoto:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Sei libero di rimuovere questi commit in seguito (con git reset) perché non li hai condivisi con altri utenti.