Christopher bardzo dobrze wyliczył wady modelu jednego projektu na repozytorium. Chciałbym omówić niektóre z powodów, dla których warto rozważyć podejście oparte na wielu repozytoriach. W wielu środowiskach, w których pracowałem, podejście oparte na wielu repozytoriach było rozsądnym rozwiązaniem, ale decyzja o tym, ile repozytoriów mieć i gdzie dokonać cięć, nie zawsze była łatwa.
Na moim obecnym stanowisku migrowałem gigantyczne repozytorium CVS z pojedynczym repozytorium i ponad dziesięcioletnią historią do wielu repozytoriów git. Od tej pierwszej decyzji liczba repozytoriów wzrosła (dzięki działaniom innych zespołów), do tego stopnia, że podejrzewam, że mamy więcej niż byłoby optymalne. Niektórzy nowi zatrudnieni sugerowali połączenie repozytoriów, ale ja się temu sprzeciwiałem. Projekt Wayland ma podobne doświadczenie. W rozmowie, którą ostatnio widziałem, mieli w pewnym momencie ponad 200 repozytoriów git, za co przeprosił szef. Patrząc na ich stronę internetową , widzę, że mają teraz 5 lat, co wydaje się rozsądne. Ważne jest, aby pamiętać, że łączenie i dzielenie repozytoriów jest wykonalnym zadaniem i można eksperymentować (z uzasadnieniem).
Kiedy więc chcesz mieć wiele repozytoriów?
- Pojedyncze repozytorium byłoby zbyt duże, aby było wydajne.
- Twoje repozytoria są luźno powiązane lub oddzielone.
- Deweloper zazwyczaj potrzebuje tylko jednego lub niewielkiego podzbioru twoich repozytoriów.
- Zazwyczaj chcesz samodzielnie tworzyć repozytoria i tylko od czasu do czasu je synchronizować.
- Chcesz zachęcić do większej modułowości.
- Różne zespoły pracują w różnych repozytoriach.
Punkty 2 i 3 są znaczące tylko wtedy, gdy punkt 1 jest ważny. Dzieląc nasze repozytoria, znacznie zmniejszyłem opóźnienia naszych współpracowników z zewnątrz, zmniejszyłem zużycie dysku i poprawiłem ruch w sieci.
4 i 5 są bardziej subtelne. Po podzieleniu repozytoriów powiedzmy klienta i serwera, to bardziej kosztowne jest koordynowanie zmian między kodem klienta i serwera. Może to być pozytywne, ponieważ zachęca do oddzielenia interfejsu między nimi.
Nawet pomimo wad projektów obejmujących wiele repozytoriów, w ten sposób wykonuje się wiele poważnych prac - na myśl przychodzą sposoby i ulepszenia. Nie wydaje mi się, aby doszło do konsensusu w sprawie najlepszych praktyk i konieczna jest pewna ocena. Narzędzia do pracy z wieloma repozytoriami (git-poddrzewo, git-submodule i inne) są wciąż rozwijane i eksperymentowane. Radzę eksperymentować i być pragmatycznym.