Wznawiam klon git-svn


117

Zacząłem klonować repozytorium SVN za pomocą operacji klonowania git-svn. Po około 6 godzinach importowania (to duże repozytorium) mój komputer poszedł i spał na mnie. Czy istnieje sposób na wznowienie operacji bez ponownego wykonywania całej początkowej pracy?

Odpowiedzi:


156

git svn fetchKomenda wznowić git svn clonejest potwierdzone przez kilku źródeł:

(Nawiasem mówiąc, jeśli podczas początkowego etapu klonowania połączenie znika lub musisz je zatrzymać, aby wznowić klon, wystarczy uruchomić powyższe polecenie, aby wznowić pobieranie historii).

Wydaje się, że w programie jest wyciek pamięci git-svn. Rozmiar git-svnprocesu rósł powoli i po około dwóch tygodniach osiągnął rozmiar rezydenta 1,2 GB, w którym to momencie system operacyjny odmówił rozwidlenia.
Chodzi o to, że to było szczęście w nieszczęściu.
Udało mi się wznowić przerwany klon prostym " git svn fetch" i działał znacznie szybciej z teraz radykalnie mniejszą stertą.
To działało tak dobrze, że nabrałem zwyczaju przerywania i wznawiania procesu każdego wieczoru i każdego ranka. Kilka dni później było to zrobione.

Zaczynasz swoje przygody z git-svnklonowaniem istniejącego repozytorium Subversion:

git svn clone url://path/to/repo -s

-sFlag zakłada, że repozytorium wykorzystuje „pień, gałęzie, znaczniki” Konwencja. Jeśli nie, musisz ręcznie określić, które katalogi reprezentują gałęzie i tagi, jeśli chcesz, aby Git o nich wiedział.

Zajmie to dużo czasu, ponieważ pobierze każdą wersję z SVN i zatwierdzi lokalnie. Jeśli z jakiegoś powodu przestanie działać, możesz wznowić za pomocą git svn fetch.


1
Myślę, że niektóre z podanych opcji wiersza poleceń należy git svn clonerównież podać (jeśli dotyczy) git svn fetch. Na przykład, miałem ustawione -r HEADna git svn cloneuzyskać tylko rewizji HEAD SVN. Aby wznowić, uruchomiłem git svn fetch, który rozpoczął importowanie wszystkich wersji.
amolbk

Zaczęło się od pierwszej wersji… Mam 10.000 zatwierdzeń! Jakieś przemyślenia, jak wznowić od miejsca, w którym zostało przerwane?
Nathan JB

@ NathanJ.Brauer nie na czubku głowy. Możesz zadać nowe pytanie (z zastosowanym systemem operacyjnym, wersją git i wersją svn oraz linkiem do tej odpowiedzi w celu uzyskania kontekstu)
VonC

1
Przypadkowo git svn cloneprzerwałem połączenie sieciowe , przerywając proces. Uruchomiony git svn cloneponownie pojawiła się na wznowienie klona-in-progress. Czy ktoś jeszcze to zrobił?
Kehlan Krumme

1
@Kehlan Najwyraźniej tak, jeśli weźmiesz pod uwagę odpowiedź zan-xhipe poniżej
VonC

17

Znalazłem post na blogu, który zawiera (mam nadzieję) poprawną odpowiedź.

Wygląda na to, że uruchomienie git svn fetchskutecznie kończy operację klonowania. Mamy nadzieję!


7
będziesz musiał użyć git svn rebasepo pobraniu, aby zakończyć operację i mieć gałąź główną odzwierciedlającą pień
Romuald Brunet

Czy możesz podać link do wpisu na blogu do wykorzystania w przyszłości?
jmanning2k

6

Jak powiedzieli VonC, CaptainAwesomePants i Archi, wszystko git svn fetchto załatwia sprawę . Robiłem git svn clone url... --authors-file=path/to/filei klon się nie powiódł, ponieważ jednego z autorów nie było w pliku autorów. Dodałem autora do pliku i uruchomiłem git svn fetchi kontynuowałem od miejsca, w którym zostało przerwane, i patrząc na dziennik gita później, wydaje się, że użył nowo dodanego autora, aby zastąpić nazwisko autora zatwierdzenia, więc wszystko było słodkie.


5

Od co najmniej gita 2.1.0 możesz wznowić, po prostu ponownie wydając git svn clone

Jednak spowoduje to zduplikowanie niektórych wpisów w twoim .git / config, usunie je i wszystko będzie dobrze


From at least git 2.1.0...Masz jakiś pomysł, czy ta funkcja istniała w git 1.9.1?
CivFan

Przepraszam, nie mam już żadnych repozytoriów svn, aby to wypróbować.
zan-xhipe

git svn fetchspowodowało niedopasowanie sumy kontrolnej - i nie można było go zresetować, ponieważ najwyraźniej nie było HEAD: / - ale to działa dobrze, po prostu musiałem usunąć svn-remote.fetchz.git/config
OLL
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.