Close

Git convert: A step in migration from SVN to Git

Kolejnym krokiem w procesie migracji z systemu SVN do Git jest zaimportowanie zawartości repozytorium SVN do nowego repozytorium Git. Wykorzystamy w tym celu narzędzie git svn dostępne w większości dystrybucji Git, a następnie wyczyścimy wyniki za pomocą narzędzia svn-migration-scripts.jar.

Pamiętaj, że w przypadku większych repozytoriów, a nawet klonowania z lokalnego repozytorium SVN, proces konwersji może zająć sporo czasu. Orientacyjnie konwersja repozytorium o pojemności 400 MB zawierającego 33 000 commitów w gałęzi main zajęła około 12 godzin.

W przypadku repozytoriów o przeciętnych rozmiarach na komputerze lokalnym kierownika migracji należy wykonać opisaną poniżej procedurę. Jeśli jednak masz bardzo duże repozytorium SVN, a chcesz skrócić czas konwersji, możesz uruchomić polecenie git svn clone na serwerze SVN, a nie na komputerze lokalnym kierownika migracji. Pozwoli to uniknąć obciążenia związanego z klonowaniem za pośrednictwem połączenia sieciowego.


Klonowanie repozytorium SVN


Polecenie git svn clone przekształca gałąź główną, gałęzie oraz tagi znajdujące się w repozytorium SVN w nowe repozytorium Git. W zależności od struktury repozytorium SVN polecenie trzeba skonfigurować w inny sposób.

Migracja do Git: polecenie git svn clone
Bazy danych
materiały pokrewne

Jak przenieść pełne repozytorium Git

Logo Bitbucket
POZNAJ ROZWIĄZANIE

Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud

Standardowe układy SVN

Jeśli Twój projekt SVN wykorzystuje standardowy układ katalogów /trunk, /branches i /tags, możesz użyć opcji --stdlayout, zamiast ręcznie określać strukturę repozytorium. Uruchom następujące polecenie w katalogu ~/GitMigration:

git svn clone --stdlayout --authors-file=authors.txt
 <svn-repo>/<project> <git-repo-name>

Gdzie <svn-repo> to identyfikator URI repozytorium SVN, które chcesz zmigrować, <project> to nazwa projektu do zaimportowania, a <git-repo-name> to nazwa katalogu nowego repozytorium Git.

Przykładowo do przeprowadzenia migracji projektu o nazwie Confluence hostowanego w witrynie https://svn.atlassian.com możesz wykonać następujące polecenie:

git svn clone --stdlayout --authors-file=authors.txt https://svn.atlassian.com/Confluence ConfluenceAsGit

Niestandardowe układy SVN

Jeśli repozytorium SVN nie ma układu standardowego, musisz podać lokalizacje gałęzi głównej, gałęzi i tagów za pomocą opcji wiersza polecenia --trunk, --branches i --tags. Jeśli na przykład masz gałęzie zapisane zarówno w katalogu /branches, jak i w katalogach /bugfixes, możesz użyć następującego polecenia:

git svn clone --trunk=/trunk --branches=/branches 
 --branches=/bugfixes --tags=/tags --authors-file=authors.txt 
 <svn-repo>/<project> <git-repo-name>

Sprawdzenie nowego repozytorium Git


Po zakończeniu operacji git svn clone (która może chwilę potrwać) nowy katalog o nazwie <git-repo-name> znajdziesz w lokalizacji ~/GitMigration. Będzie to przekonwertowane repozytorium Git. Powinna być możliwość przełączenia na repozytorium <git-repo-name> i uruchomienia dowolnego ze standardowych poleceń Git w celu zbadania projektu.

Gałęzie i tagi nie zostały zaimportowane do nowego repozytorium Git, jak można by oczekiwać. W danych wyjściowych polecenia git branch nie znajdziesz żadnych ze swoich gałęzi SVN, a w danych wyjściowych polecenia git tag nie będzie żadnych tagów SVN. Jeśli jednak wykonasz polecenie git branch -r, zobaczysz wszystkie gałęzie i tagi ze swojego repozytorium SVN. Polecenie git svn clone importuje Twoje gałęzie SVN jako gałęzie zdalne, a Twoje tagi SVN — jako zdalne gałęzie poprzedzone przedrostkiem tags/.

Migracja do Git: struktura sklonowanego repozytorium Git

Taki sposób działania ułatwia określone procedury synchronizacji dwukierunkowej, jednak może być bardzo mylący przy próbach przeprowadzenia jednokierunkowej migracji Git. Dlatego naszym kolejnym krokiem będzie skonwertowanie tych gałęzi zdalnych do gałęzi lokalnych i faktycznych tagów Git.

Czyszczenie nowego repozytorium Git


Skrypt clean-git zawarty w svn-migration-scripts.jar przekształca gałęzie SVN w lokalne gałęzie Git, a tagi SVN w pełnoprawne tagi Git. Pamiętaj, że jest to operacja destrukcyjna i przeniesienie commitów z repozytorium Git z powrotem do repozytorium SVN będzie niemożliwe.

Jeśli wykonujesz procedurę zgodnie z tym przewodnikiem migracji, nie stanowi to problemu, ponieważ jest tu zalecana jednokierunkowa synchronizacja z SVN do Git (repozytorium Git jest traktowane jako tylko do odczytu, dopóki nie zostanie ukończony etap Migracja). Jeśli jednak planujesz dodawanie commitów do repozytorium Git oraz do repozytorium SVN podczas procesu migracji, nie wykonuj poniższych poleceń. Jest to zadanie zaawansowane i nie zaleca się wykonywania go w typowym projekcie.

Aby sprawdzić, co można wyczyścić, uruchom następujące polecenie w repozytorium ~/GitMigration/:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git

Ta operacja spowoduje wyświetlenie wszystkich zmian, które skrypt ma wprowadzić, bez ich faktycznego wprowadzania. Aby wykonać te zmiany, trzeba użyć opcji --force, jak poniżej:

java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar clean-git --force

Teraz w danych wyjściowych polecenia git branch powinny pojawić się wszystkie gałęzie SVN, a polecenie git tag powinno zwrócić wszystkie tagi SVN. Oznacza to, że projekt SVN został pomyślnie przekonwertowany na repozytorium Git.

Podsumowanie


W tym kroku repozytorium SVN zostało przekształcone w nowe repozytorium Git za pomocą polecenia git svn clone. Następnie wyczyszczono strukturę otrzymanego repozytorium za pomocą narzędzia svn-migration-scripts.jar. W kolejnym kroku dowiesz się, jak zapewnić synchronizację wszelkich nowych commitów dodawanych do repozytorium SVN z tym nowym repozytorium Git. Będzie to proces zbliżony do konwersji, jednak w tym okresie przejściowym należy wziąć pod uwagę pewne ważne kwestie związane z przepływem pracy.


Udostępnij ten artykuł
Następny temat

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up