Jeśli dobrze rozumiem twój problem, potrzebujesz następujących rzeczy:
- Przechowuj swoje pliki multimedialne w jednym repozytorium git, z którego korzysta wiele projektów
- Jeśli zmodyfikujesz plik multimedialny w dowolnym projekcie na komputerze lokalnym, powinien on natychmiast pojawić się w każdym innym projekcie (więc nie chcesz przez cały czas zatwierdzać + wypychać + wyciągać)
Niestety nie ma ostatecznego rozwiązania tego, czego chcesz, ale istnieją pewne rzeczy, dzięki którym możesz ułatwić sobie życie.
Najpierw powinieneś zdecydować o jednej ważnej rzeczy: czy chcesz przechowywać dla każdej wersji w repozytorium projektu odniesienie do wersji plików multimedialnych? Na przykład, jeśli masz projekt o nazwie example.com, czy potrzebujesz wiedzieć, którego style.css używał 2 tygodnie temu, czy najnowszy jest zawsze (lub głównie) najlepszy?
Jeśli nie musisz tego wiedzieć, rozwiązanie jest proste:
- utwórz repozytorium dla plików multimedialnych i jedno dla każdego projektu
- utwórz symboliczne łącze w swoich projektach, które wskazują na lokalnie sklonowane repozytorium mediów. Możesz albo utworzyć względne dowiązanie symboliczne (np. ../Media) i założyć, że każdy przejdzie do projektu, aby katalog multimediów znajdował się w tym samym miejscu, lub wpisać nazwę dowiązania symbolicznego do .gitignore i każdy może zdecydować gdzie umieszcza pliki multimedialne.
W większości przypadków jednak chcesz poznać te informacje o wersji. W takim przypadku masz dwie możliwości:
Przechowuj każdy projekt w jednym dużym repozytorium. Zaletą tego rozwiązania jest to, że będziesz mieć tylko 1 kopię repozytorium multimediów. Dużą wadą jest to, że znacznie trudniej jest przełączać się między wersjami projektu (jeśli przejdziesz do innej wersji, zawsze zmodyfikujesz WSZYSTKIE projekty)
Użyj submodułów (jak wyjaśniono w odpowiedzi 1). W ten sposób będziesz przechowywać pliki multimedialne w jednym repozytorium, a projekty będą zawierać tylko odniesienie do konkretnej wersji repozytorium multimediów. Ale w ten sposób zwykle będziesz mieć wiele lokalnych kopii repozytorium multimediów i nie będziesz mógł łatwo modyfikować pliku multimedialnego we wszystkich projektach.
Gdybym był tobą, prawdopodobnie wybrałbym pierwsze lub trzecie rozwiązanie (dowiązania symboliczne lub submoduły). Jeśli zdecydujesz się na użycie podmodułów, nadal możesz zrobić wiele rzeczy, aby ułatwić Ci życie:
Przed zatwierdzeniem możesz zmienić nazwę katalogu submodułu i umieścić dowiązanie symboliczne do wspólnego katalogu multimediów. Kiedy będziesz gotowy do zatwierdzenia, możesz usunąć dowiązanie symboliczne i usunąć submoduł z powrotem, a następnie zatwierdzić.
Możesz dodać jedną ze swoich kopii repozytorium multimediów jako repozytorium zdalne do wszystkich swoich projektów.
Możesz dodać katalogi lokalne jako zdalne w ten sposób:
cd /my/project2/media
git remote add project1 /my/project1/media
Jeśli zmodyfikujesz plik w / my / project1 / media, możesz zatwierdzić go i pobrać z / my / project2 / media bez wypychania go na zdalny serwer:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Możesz później usunąć te zatwierdzenia (z git reset), ponieważ nie udostępniłeś ich innym użytkownikom.