Chcę wiedzieć, jak zarządzać dużym projektem z wieloma komponentami za pomocą systemu zarządzania kontrolą wersji.
W moim obecnym projekcie są 4 główne części.
- Sieć
- serwer
- Konsola administracyjna
- Platforma.
Część internetowa i serwerowa używa 2 bibliotek, które napisałem. W sumie istnieje 5 repozytoriów git i 1 repozytorium rtęciowe. Skrypt kompilacji projektu znajduje się w repozytorium platformy. Automatyzuje cały proces budowy.
Problem polega na tym, że gdy dodam nową funkcję, która wpływa na wiele składników, muszę utworzyć gałąź dla każdego repozytorium, którego dotyczy problem. Zaimplementuj tę funkcję. Scal to z powrotem. Moje przeczucie brzmi: „coś jest nie tak”.
Czy powinienem utworzyć pojedyncze repozytorium i umieścić tam wszystkie komponenty? Myślę, że rozgałęzienie będzie w tym przypadku łatwiejsze. Albo po prostu robię to, co robię teraz. W takim przypadku jak rozwiązać ten problem tworzenia gałęzi w każdym repozytorium?
źródło
Odpowiedzi:
W opisywanej sytuacji nie ma żadnych korzyści z posiadania wielu repozytoriów, ale wiąże się to z pewnym kosztem: nie można przywrócić starszej wersji repozytorium i mieć pewność, że system będzie nadal działał. Wynika to z faktu, że kod jest ściśle powiązany z repozytoriami. Ponieważ zaufanie do możliwości wycofania jest jedną z głównych korzyści kontroli źródła, nie jest to sytuacja, w której chcesz się znaleźć.
Rozwiązaniem jest zdefiniowanie struktury repozytorium na podstawie sprzężenia zawartego w nim kodu: jeśli komponent projektu A dzieli tylko stabilne interfejsy z komponentem projektu B, wówczas można je umieścić w osobnych repozytoriach. W przeciwnym razie powinny one znajdować się w tym samym repozytorium. Bardziej szczegółowy układ repozytorium będzie odzwierciedlał lepiej zorganizowaną architekturę systemu.
źródło
Jeśli każde z twoich repozytoriów jest samodzielnymi projektami lub bibliotekami, powiedziałbym, że nie ma nic złego w konieczności tworzenia gałęzi funkcji w każdym repozytorium podczas dodawania nowych funkcji, które są przekrojowe w projektach. Będąc samodzielnym, każdy z nich może być niezależnie wersjonowany i możesz przestać używać starych interfejsów API.
Ale w twoim konkretnym przypadku wygląda na to, że Twoje repozytoria nie grupują twojego kodu skutecznie. Jeśli zmiany w kodzie w jednym repozytorium wymagają zmian w innych (na bok wycofanie), to albo twoje połączenie jest zbyt ciasne, albo repozytoria powinny zostać zreorganizowane.
Jeśli wszystkie repozytoria są częścią tego samego projektu (nie mogą być samodzielne), być może powinieneś mieć tylko 1 repozytorium. (A może 2: projekt główny i jeden dotyczący ogólnej / standardowej funkcjonalności).
źródło