2013-03-01 21 views
9

ProblemGit-svn - import pełną historię

Domyślnie git svn clone importu historii tylko od utworzenia oddziału roku, pomimo faktu, że historia jest obecna plików w repozytorium SVN przed stworzeniem oddziału.

Nasz oddział svn został stworzony przez svn copy, jeśli to ma znaczenie.

Moje próby

Próbowałem --no-minimize-url i --follow-parent, ale bez powodzenia. Wyprodukowane repozytorium git jest takie samo jak bez tych paramerów, poczynając od tworzenia gałęzi.

Pożądany wynik

repozytorium Git z pełnej historii od stworzenia repozytorium SVN.

Aktualizacja Moja rzeczywista linia poleceń to git svn clone http://svnserver/repo/dir1/dir2/project.
Co pomogło -T argumentem był z polecenia
git svn clone http://svnserver/repo/ -T dir1/dir2/project

wynikające

Wielkie dzięki!

+0

Czy próbowałeś z flagą -T? git svn clone -T repo_url? –

+0

@Kata, nie odwołujesz się do flagi '-s'? Standardowy układ. Przyjmuje standardowy format katalogu trunk/branches/tags, więc importuje wszystkie gałęzie i znaczniki z repozytorium SVN. Znalazłem http://jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/ szczególnie przydatne do migracji. – mgarciaisaia

+0

Czy możesz opublikować całe polecenie (wykluczone wrażliwe adresy URL) z tego, co użyłeś do sklonowania repozytorium svn? –

Odpowiedz

10

Domyślnie git svn import historii klonów tylko od stworzenia oddziału roku, pomimo faktu, że historia jest obecna plików w repozytorium svn przed stworzeniem oddziału.

Tak. to prawda. git svn będzie próbował importować gałęzie tylko jako gałęzie, jeśli tak powiedzą. Z podręcznika z git-svn:

Podczas klonowania repozytorium SVN, jeśli jest używana żadna z opcji opisujący repozytorium układ (--trunk, --tags, --branches, --stdlayout), klon git svn utworzy repozytorium git z całkowicie liniową historią, gdzie gałęzie i tagi pojawiają się jako osobne katalogi w kopii roboczej.

Po przekazaniu adresu URL do jednej gałęzi do git svn clone (zamiast adresu URL najwyższego poziomu) zostanie wyświetlona historia liniowa dla tej gałęzi. Prawdopodobnie to widzisz.

Aby uzyskać pełną historię, należy skorzystać z opcji układu repozytorium wymienionych powyżej i przekazać adres URL najwyższego poziomu. Wtedy git svn spróbuje stworzyć gałęzie git dla gałęzi SVN i spróbuje nadać im właściwą historię, cofając się przed ich utworzeniem.

Należy pamiętać, że spowoduje to utworzenie pełnego repozytorium ze wszystkimi oddziałami. Jeśli chcesz tylko niektóre branże, musisz zmodyfikować konfigurację jak wyjaśniono w manpage:

Jest również możliwe, aby pobrać podzbiór oddziały lub tagów za pomocą oddzielonych przecinkami listę nazw wewnątrz szelki.Na przykład:

 [svn-remote "huge-project"] 
       url = http://server.org/svn 
       fetch = trunk/src:refs/remotes/trunk 
       branches = branches/{red,green}/src:refs/remotes/branches/* 
       tags = tags/{1.0,2.0}/src:refs/remotes/tags/* 

Zobacz git-svn(1).

+2

Jeśli określisz wiele pojedynczych gałęzi jako wiele opcji 'svn-remote. {Name} .fetch' config (musisz to zrobić ręcznie pomiędzy uruchomieniem' git svn init' i pierwszym 'git svn fetch', no' git svn skróconego skrótu), możesz pobrać garść określonych gałęzi, w tym historię gałęzi między nimi. –

+0

@me_and: Dobra uwaga. Dokumenty git-svn wyjaśniają także, jak pobierać tylko niektóre gałęzie; Edytowałem swoją odpowiedź. – sleske

+0

Jak to zrobić, jeśli nie masz układu svn i zamiast rozgałęzień wykonałeś svn-copys? – Spen