Migracja do Mono-repo bez tracenia historii Git’a

Migracja do Mono-repo bez tracenia historii Git'a

Jeżeli masz coraz większy problem z synchronizacją kodu w wielu repozytoriach, wersjonowaniem czy automatyzacją CI to być może warto pomyśleć o migracji do mono-repo.

Nie będę dzisiaj przekonywał czemu mono-repo jest lepszą opcją, ale jeżeli sam dostrzegasz jego zalety, to pokażę Ci dzisiaj jak w prosty sposób przemigrować się z wielu repozytoriów do jednego, bez tracenia historii Git’a.

Spróbujemy połączyć frontend (app) oraz backend (api) w jedno repozytorium które roboczo nazwiemy produktem (product).

Operacje które będziemy wykonywać nie wprowadzają zmian w istniejących repozytoriach, dlatego nie musisz się obawiać. Będziemy je wykonywać tylko lokalnie.

Zacznijmy

1- Pierwszą rzeczą którą musimy zrobić jest utworzenie nowego repozytorium, czyli po prostu naszego mono-repo.

cd /home/user
mkdir product
cd product
git init 

2- Na poziomie home/user klonujemy repozytoria które chcemy połączyć w jedno mono-repo. Czyli w naszym przypadku app oraz api. Aktualna struktura powinna wyglądać tak:

— product
— app
— api

Powtórz poniższe kroki dla każdego repozytorium

W tym przykładzie zrobimy to dla repozytorium app.

3- W katalogu app tworzymy katalog app

cd /home/user/app
mkdir app

4- Przenosimy pliki z katalogu app do katalogu app, aby uniknąć konfliktów tych samych ścieżek pomiędzy repozytoriami.

ls -a1 | grep -v ^app | xargs -I{} git mv {} app

5- Commitujemy nasze zmiany

git commit -m "mono repo — moving app"

6- Dodajmy do naszego mono-repo (product) repozytorium app jako remote

cd /home/user/product
git remote add app /home/user/app/

7- Dociągamy historię Git’a z nowo dodanego remote’a

git fetch app

8- Łączymy nasze zewnętrzne repozytorium (app) z naszym mono-repo

git merge app/development --allow-unrelated-histories

W naszym przypadku będzie to branch development.

W tym momencie nasze repozytorium produktu (mono-repo), posiada wszystkie pliki repozytorium app wraz z całą historią commitów.

Teraz powtórz tą samą czynność dla wszystkich pozostałych repozytoriów które chcesz przyłączyć do mono-repo.

Podsumowanie

Repozytorium w katalogu product (mono-repo) posiada teraz dwa dodatkowe katalogi app oraz api oraz całą historię commitów z obu tych repozytoriów. Możesz je teraz wysłać do miejsca w którym przechowujesz swój kod.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *