68 97 119 105 100 32 82 121 108 107 111

Git - Submodules - rozdzielenie repozytoriów

17 kwietnia 2017 | Dawid Ryłko

Jednym z założeń Shopping Manager było stworzenie aplikacji RESTowej - backend napisany w Go oraz frontend utworzony przy pomocy Angular 2. Jako że jest to również aplikacja konkursowa, na tegoroczną edycję Daj Się Poznać, zobligowany byłem całość umieścić w jednym repozytorium.

Proces developmentu nie był przez to utrudniony. Wszak pracę nad aplikacją wykonuję cały czas sam. Nie zbaczając z toru, tkwiłem jednak w tym błędnym rozwiązaniu.

Moment krytyczny

Przyszedł jednak dzień, że aplikacja powinna opuścić localhost. Wtedy też, chcąc nie chcąc, musiałem rozdzielić backend od frontendu.

Z pomocą przyszedł niezawodny Git. Oferuje on rozwiązanie submodules, które doskonale nadaje się do rozwiązania wszystkich problemów. Pierwsze zdania z dokumentacji znakomicie odzwierciedlają mój problem:

It often happens that while working on one project, you need to use another project from within it. Perhaps it’s a library that a third party developed or that you’re developing separately and using in multiple parent projects. A common issue arises in these scenarios: you want to be able to treat the two projects as separate yet still be able to use one from within the other.

Dwa nowe repozytoria

Dotychczasowa struktura wyglądała następująco:

Git - Shopping Manager - Directory structure

By rozdzielić repozytoria, trzeba wpierw założyć nowe. Dlatego stworzyłem odpowiednio shopping-manager-api i shopping-manager-web:

Po odpowiednim sformatowaniu plików i przygotowaniu niezależnych repozytoriów, możemy je umieścić w starym. Aby to zrobić, należy posłużyć się komendą:

git submodule add nazwa_repozytorium

Dodatkowo zależało mi, by struktura projektu została taka sama. Dlatego po nazwie repozytorium podałem nazwę folderu, w którym submodule miał zostać stworzony:

git submodule add git@github.com:dawidrylko/shopping-manager-api.git api

Repozytorium zostało sklonowane do wskazanego katalogu. Został także stworzony plik .gitmodules, którego struktura przedstawia się następująco:

[submodule "api"]
	path = api
	url = git@github.com:dawidrylko/shopping-manager-api.git

Jeżeli teraz spojrzymy na główne repozytorium, możemy zauważyć, że wygląd folderu się zmienił. Dodatkowo obok folderu widnieje commit, na który wskazuje submodule. Analogicznie postępujemy z drugim repozytorium.

Git - Shopping Manager - Submodules

Aktualizacja

Repozytoria, które zawarte są w submodułach, wskazują na odpowiedniego commita. Aby zaaktualizować submodules, wykonujemy komendę:

git submodule update --remote --merge

Źródła


Profile picture

Dawid Ryłko

Software Engineer | Frontend Architect