Jest to pytanie, które wydaje się pojawiać pół-często, ale niestety nie znalazłem odpowiedzi, którą mogę w pełni zastosować do mojej sytuacji, więc pomyślałem, że zadam własne pytanie . To jest moje pierwsze pytanie na SO, więc bądź miły. : PWiele repozytoriów w jednym katalogu
„Problem”: Nasza firma rozwija się wiele aplikacji PHP, jednak jedna z tych aplikacji jest „master” rodzajów. Wszystkie nasze inne aplikacje są zainstalowane wewnątrz tej "aplikacji master" i wymagają działania głównej aplikacji.
Oczywiście używamy kontroli wersji do zarządzania tymi aplikacjami.
Podczas gdy wiele plików w naszych aplikacjach dodatków znajduje się w podkatalogach, nie wszystkie z nich są. Oznacza to, że nie możemy używać importowania podkatalogów (svn externals, git submoduły itp.). Na przykład w folderze głównym znajduje się kilka folderów (admin, public, kernel itd.), A aplikacje addon mają pliki w jednym lub więcej z tych folderów - nie są one niezależnie samodzielne w strukturze katalogów aplikacji głównej .
Obecnie korzystamy z SVN i niedawno znaleźliśmy się z myślą o git z powodu niektórych dostępnych funkcji, które mogą nam się przydać. Jedną rzeczą, której nie jestem pewien z git, jest to, czy naprawdę istnieje sposób "scalenia" (nie w sensie kontroli wersji) tych repozytoriów w jeden katalog lokalnie, gdy programiści pracują nad kodem. Nie znalazłem sposobu, aby to zrobić z SVN.
W idealnym świecie, mielibyśmy jedno repozytorium dla naszego "mistrza" wniosku o strukturze tak:
- /
- --file1
- --file2
- -/admin
- ---- plik1
- ---- plik2
- -/public
- ---- plik1
Nasza aplikacja dodatek będzie mieć strukturę jak tak (należy pamiętać, mamy wiele aplikacji dodatek):
- /
- --filex
- -/admin
- ----/myapp
- ------ plik1
- ------ fi LE2
- -/public
- ---- filex
Mamy eksperymentował z następujących metod, każda z własnymi zastrzeżeniami:
- Wszystkie aplikacje w jednym repozytorium. Jest to mniej niż idealne, ponieważ staje się koszmarem, skutecznie zarządzającym wersjami dla każdej aplikacji (szczególnie w SVN). Rozgałęzianie i tagowanie zabierają pliki z niepowiązanych i oddzielnych aplikacji.
- Wszystkie aplikacje w osobnym repozytorium. Nie jest to również idealne (cóż, jest to kwestia zarządzania/organizacji), ponieważ nie można wyeksportować dwóch oddzielnych repozytoriów do jednego folderu, więc zawsze pracujesz przy kasie jednego repozytorium i eksportowaniu innych. Jeśli pracujesz nad aplikacją X i są zmiany w naszej aplikacji głównej, musisz ręcznie wykonać nowy eksport tej aplikacji głównej i skopiować pliki do repozytorium aplikacji X, nad którym pracujesz, aby mieć najnowszy kod frameworka.
Czy istnieje sposób z git lub SVN (lub innym systemem kontroli wersji), aby zezwolić na więcej niż jedno repozytorium w jednym katalogu bez używania podkatalogów? SVN externals jest prawie idealny, ale wymaga, aby wszystkie pliki w zewnętrznym repozytorium znajdowały się w osobnym podfolderze, co, jak opisano powyżej, nie działa dla nas. GIT ma równoważne możliwości, ale znowu nie mogę pozwolić na więcej niż jedno repozytorium w jednym folderze, pozostawiając nam ten sam problem.
Podobne pytania: Multiple repositories in one directory (same level) - is it possible? - to jest bardzo blisko tego, co pytam myślę, ale nie widzę żadnego rozwiązania, które czułem można zastosować do naszej sytuacji.
z git, zwykle zrobić coś z gałęziami Każdy deweloper może mieć jeden lub każdy moduł częściowy lub dowolną kombinację, którą możesz wymyślić Kiedy poczujesz, że jesteś gotowy do połączenia swojej gałęzi z główną (lub jakąkolwiek inną) gałęzią, robisz to. – Timo
Aby być bardziej dokładnym : Możesz mieć jedną gałąź dla głównej aplikacji i na tej podstawie zdefiniować gałęzie modułów: dziedziczą strukturę katalogów, ale niezależnie od tego, co w nich włożysz, pozostanie tam. Wadą jest to, że nie możesz pracować z wieloma oddziałami naraz: musisz nadal kasa ich indywidualnie, ale wszystko w rzeczywistości będzie w jednym katalogu i możesz przenosić rzeczy z jednej gałęzi do drugiej dość łatwo. – Timo
+1 za przeniesienie do git. A przynajmniej rozważając to. –