Jeśli rozumiem problemu dobrze chcesz następujące rzeczy:
- miec pliki multimedialne przechowywane w jednym repozytorium pojedynczego git, który jest używany przez wiele projektów
- Jeśli modyfikować plik multimedialny w dowolnym projekcie na lokalnym komputerze powinien on natychmiast pojawić się w każdym innym projekcie (nie chcesz więc zatwierdzać + push + ciągnij cały czas)
Niestety, nie ma ostatecznego rozwiązania dla czego chcesz, ale są 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óry styl.css był używany 2 tygodnie temu, czy najnowszy jest zawsze (lub w większości) najlepszy?
Jeśli nie wiedzieć, że rozwiązanie jest proste:
- stworzyć repozytorium plików multimedialnych i jeden dla każdego projektu
- utworzyć dowiązanie symboliczne w projektach, które wskazują na lokalnie sklonowane repozytorium multimediów. Możesz albo utworzyć względne dowiązanie symboliczne (np. ../media) i założyć, że wszyscy skończą projekt, aby katalog z multimediami był w tym samym miejscu, lub zapisz nazwę dowiązania symbolicznego w .gitignore, i każdy może zdecydować gdzie umieszcza pliki multimedialne.
W większości przypadków jednak chcesz poznać informacje o tej 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 zamawiasz do innej wersji, będziesz zawsze modyfikował 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ły tylko odniesienie do konkretnej wersji repozytorium mediów. W ten sposób zwykle będziesz mieć wiele lokalnych kopii repozytorium multimediów i nie będziesz mógł łatwo zmodyfikować pliku multimedialnego we wszystkich projektach.
Gdybym był tobą, wybrałbym prawdopodobnie pierwsze lub trzecie rozwiązanie (dowiązania symboliczne lub submoduły). Jeśli zdecydujesz się korzystać z submodules nadal można zrobić wiele rzeczy, aby ułatwić Ci życie:
Przed podjęciem można zmienić nazwę katalogu submodule i umieścić dowiązania do wspólnego katalogu mediów. Kiedy będziesz gotowy do zatwierdzenia, możesz usunąć dowiązanie symboliczne i wycofać moduł częściowy, a następnie zatwierdzić.
Możesz dodać jedną ze swoich kopii repozytorium multimediów jako zdalne repozytorium do wszystkich swoich projektów.
Możesz dodać lokalnych katalogów jako pilota w ten sposób:
cd /my/project2/media
git remote add project1 /my/project1/media
Jeśli modyfikować plik w/mojego/project1/media, można popełnić go i wyciągnąć go z/mojego/project2/mediów bez pchania go do zdalnego serwera:
cd /my/project1/media
git commit -a -m "message"
cd /my/project2/media
git pull project1 master
Jesteś wolny, aby usunąć te rewizje później (z resetem git), ponieważ nie podzielił się nimi z innymi użytkownikami.
Ten przebieg przypomina mi użycie prywatnego modułu NPM http://stackoverflow.com/questions/7575627/can-you-host-a-private-repository-for-your-organization-to-use- with- npm # answer-7807279 – cyrf
Jeśli wolisz, aby domyślna była najnowsza wersja, możesz dodać skrypt, aby propagować zatwierdzenie MEDIA do wszystkich zależnych projektów. – jiggunjer
Jak to się integruje z githubem? – theonlygusti