← До фільтрів та технологій

← До списку лабораторних по Git

Git Лабораторна 74: Концепція path based split

Технологія: Git

Номер лабораторної: 74 · Рівень: middle

Тема: Виділення частини репозиторію у окремий проєкт

Повний опис / сценарій лабораторної:

Meta: зрозуміти як за допомогою filter-repo або схожих інструментів виділити один каталог у окремий репозиторій зі збереженням історії.



Krok 1. Створити монорепозиторій з кількома каталогами.

Komandy: cd ~; mkdir split74; cd split74; git init; mkdir serviceA serviceB; echo "A code" > serviceA/a.txt; echo "B code" > serviceB/b.txt; git add .; git commit -m "Initial mono layout"



Krok 2. Зробити кілька комітів які змінюють лише serviceA.

Komandy: echo "A change 1" >> serviceA/a.txt; git add serviceA/a.txt; git commit -m "Change A1"; echo "A change 2" >> serviceA/a.txt; git add serviceA/a.txt; git commit -m "Change A2"



Krok 3. Аналогічно змінити serviceB.

Komandy: echo "B change" >> serviceB/b.txt; git add serviceB/b.txt; git commit -m "Change B1"



Krok 4. Ознайомитися з довідкою по filter-repo або подібному інструменту.

Poyasnennya: подивись як задати шлях який потрібно залишити.



Krok 5. Створити копію репозиторію для експерименту.

Komanda: cd ~; cp -r split74 split74_serviceA



Krok 6. У копії запустити filter-repo для каталогу serviceA.

Komanda: cd split74_serviceA; git filter-repo --path serviceA

Poyasnennya: історія збережеться тільки для цього каталогу, а файли будуть у корені.



Krok 7. Перевірити що файл a.txt тепер у корені і має усю історію змін.

Komandi: ls; git log --oneline -n 5



Krok 8. Подумати як повʼязати новий репозиторій serviceA з основним монорепозиторієм через посилання у документації.



Krok 9. Занотувати ризики при такому поділі, зокрема зміну усіх хешів і необхідність оновлення систем CI.



Krok 10. Mini zvit.

Zavdannya: опиши коли варто перевести один модуль у окремий репозиторій замість продовження роботи у монорепозиторії.