Mam repozytorium multimediów Git, w którym przechowuję wszystkie moje główne pliki JavaScript i CSS oraz skrypty, których będę używać w różnych projektach.
Jeśli utworzę nowy projekt, który znajduje się we własnym repozytorium Git, jak korzystać z plików JavaScript z mojego repozytorium multimediów w nowym projekcie w sposób, który sprawia, że nie muszę aktualizować obu kopii skryptu podczas wprowadzania zmian ?
git
git-submodules
multiple-repositories
Brent O'Connor
źródło
źródło
Odpowiedzi:
Kluczem są submoduły git .
Zacznij czytać rozdział Submodules w Git Community Book lub Podręczniku użytkownika
Załóżmy, że masz repozytorium PROJECT1, PROJECT2 i MEDIA ...
Powtórz na drugim repo ...
Fajne jest to, że za każdym razem, gdy zatwierdzasz zmiany w MEDIA, możesz to zrobić:
Właśnie to zarejestrowało fakt, że submoduł MEDIA WITHIN PROJECT2 jest teraz w wersji XYZ.
Daje to 100% kontroli nad tym, jakiej wersji MEDIA używa każdy projekt. podmoduły git są świetne, ale musisz eksperymentować i dowiedzieć się o nich.
źródło
Zastanów się nad użyciem poddrzewa zamiast submodułów, dzięki czemu użytkownicy repozytorium będą znacznie łatwiejsi. Bardziej szczegółowy przewodnik można znaleźć w książce Pro Git .
źródło
Jeśli dobrze rozumiem twój problem, potrzebujesz następujących rzeczy:
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:
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:
Jeśli zmodyfikujesz plik w / my / project1 / media, możesz zatwierdzić go i pobrać z / my / project2 / media bez wypychania go na zdalny serwer:
Możesz później usunąć te zatwierdzenia (z git reset), ponieważ nie udostępniłeś ich innym użytkownikom.
źródło
www
folderu Apache , powinieneś umieścić.htaccess
plik w katalogu głównymwww
folderu lub projektu,Options +FollowSymLinks
w nim, lub jeszcze lepiej<IfModule mod_rewrite.c>{new line}Options +FollowSymLinks{new line}RewriteEngine on{new line}</IfModule>
(zamień na{new line}
nowy wiersz)Miałem problemy z poddrzewami i podmodułami, które sugerują inne odpowiedzi ... głównie dlatego, że używam SourceTree i wydaje się, że jest dość wadliwy.
Zamiast tego skończyłem używać SymLinks i wydaje się, że działa dobrze, więc zamieszczam to tutaj jako możliwą alternatywę.
Kompletny przewodnik tutaj: http://www.howtogeek.com/howto/16226/complete-guide-to-symbolic-links-symlinks-on-windows-or-linux/
Ale w zasadzie musisz po prostu połączyć obie ścieżki w wierszu polecenia z podwyższonym poziomem uprawnień. Upewnij się, że używasz prefiksu twardego łącza / J. Coś w tym stylu: mklink / JC: \ projects \ MainProject \ plugins C: \ projects \ SomePlugin
Możesz także użyć względnych ścieżek folderów i umieścić je w nietoperzu, aby każda osoba wykonała je po raz pierwszy podczas sprawdzania projektu.
Przykład: mklink / J. \ Assets \ TaqtileTools .. \ TaqtileHoloTools
Po połączeniu folderu może być konieczne zignorowanie folderu w głównym repozytorium, do którego się on odnosi. W przeciwnym razie możesz iść.
Uwaga : Usunąłem duplikat odpowiedzi z innego postu, ponieważ ten post został oznaczony jako duplikat tego pytania.
źródło