Podzielenie, split, projektu git bez utraty historii

Czasami projekt z czasem rośnie do takich rozmiarów, że najlepiej go podzielić na kilka mniejszych.
W takim wypadku dobrze jest jak projekty powstałe w ten sposób będą posiadały oddzielne repozytoria git.
Po podziale chcemy oczywiście aby historia zmian ocalała proces i nie uległa zniszczeniu.

Na szczęście git jest potężny i droga podziału jest dość prosta.

Do rzeczy :)

Założenie
nasz projekt znajdujący się w katalogu wielki-projekt posiada podkatalog, który chcemy przesunąć aby egzystował jako odrębny projekto nazwie do-przesuniecia

Proces
1. uruchom terminal
2. udaj się do katalogu projektu (w nim powinien znajdować się podkatalog do-przesuniecia)
3. utwórz branch wyłącznie z plikami z katalogu do-przesuniecia
git subtree split --prefix=do-przesuniecia/ --branch=do-przesuniecia-branch
4. przejdź poziom wyżej (do katalogu nadrzędnego do twojego projektu)
cd ..
5. utworz nowy projekt (przesuniety) wraz z repozytorium git

mkdir przesuniety
cd przesuniety
git init
git pull ../wieki-projekt do-przesuniecia-branch

6. dodaj zdalne repozytorium do świerzo utworzonego projektu
git remote add origin ssh://git@TWOJ_SERVER_GIT:PORT/TWOJ_PROJEKT_GIT.git
7. wyślij zmiany na serwer
git push -u origin –all

TO WSZYSTKO :)

Opcjonalnie w starym projekcie możesz troche poczyścić.
W terminalu, wielki-projekt

git reflog expire --expire=now --all
git repack -ad
git gc --aggressive --prune=now

Informacje o @albgorski

Od 1999 roku profesjonalnie zajmuję się rozwijaniem oprogramowania. Głównie Java, ale także Groovy, PHP, HTML, JavaScript oraz Adobe Flex. Fascynują mnie metody wymiany danych, ich przechowywania oraz dostępowania. Jestem WIELKIM zwolennikiem Clean Code, TDD oraz agilistą (może lepiej lean-istą). Ekosystem Java dostarcza WIELE świetnych frawework-ów i bibliotek, a społeczność miłośników języka Java jest najlepsza pod słońcem :)
Ten wpis został opublikowany w kategorii git i oznaczony tagami , , , , , , , , , . Dodaj zakładkę do bezpośredniego odnośnika.

Możliwość komentowania jest wyłączona.