Возобновление клона git-svn

117

Я начал клонировать репозиторий SVN, используя операцию клонирования git-svn. Примерно через 6 часов импорта (это большое репо) мой компьютер пошел и спал на мне. Есть ли способ возобновить работу без повторения всей первоначальной работы?

Брэндон Ярбро
источник

Ответы:

156

Команда git svn fetchна возобновление git svn cloneподтверждается несколькими источниками:

(Между прочим, если на начальном этапе клонирования ваше соединение прерывается или вам нужно его остановить, чтобы возобновить клонирование, вам просто нужно запустить указанную выше команду, чтобы возобновить загрузку истории).

Кажется, есть утечка памяти git-svn. Размер git-svnпроцесса медленно увеличивался, и примерно через две недели он достиг резидентного размера 1,2 ГБ, после чего ОС отказалась его выполнять.
Дело в том, что это было замаскированным благословением.
Я смог возобновить прерванный клон с помощью простого " git svn fetch", и он работал намного быстрее с теперь значительно меньшей кучей.
На самом деле это сработало так хорошо, что я привык прерывать и перезапускать процесс каждый вечер и каждое утро. Через несколько дней это было сделано.

Вы начинаете свои приключения с git-svnклонирования существующего репозитория Subversion:

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

-sФлаг предполагает , что ваше хранилище использует «ствол, ветвь, тег» конвенцию. Если нет, вам нужно вручную указать, какие каталоги представляют ветки и теги, если вы хотите, чтобы Git знал о них.

Это займет много времени, так как он будет получать каждую ревизию из SVN и фиксировать локально. Если по какой-либо причине он прекратится, вы можете продолжить с git svn fetch.

VonC
источник
1
Я думаю, что некоторые из предоставленных параметров командной строки git svn cloneтакже должны быть предоставлены (если применимо) git svn fetch. Например, я установил -r HEADдля git svn cloneполучить только пересмотр ГОЛОВА SVN. Для возобновления я побежал git svn fetch, начав импортировать все ревизии.
amolbk
Это все началось с первой ревизии .... У меня 10 000 коммитов! Есть мысли о том, как продолжить с того места, где он остановился?
Nathan JB
@ NathanJ.Brauer не в моей голове. Вы можете задать новый вопрос (с используемой ОС, версией git и версией svn и ссылкой на этот ответ для контекста)
VonC
1
Я случайно отключил свое сетевое соединение во время git svn clone, прервав процесс. Выполнение git svn cloneснова появилось, чтобы возобновить клонирование в процессе. Кто-нибудь еще это сделал?
Кехлан Крумме
1
@Kehlan Похоже, что да, если вы прислушаетесь к ответу zan-xhipe ниже
VonC
17

Я нашел сообщение в блоге, в котором был (надеюсь) правильный ответ.

По-видимому, запуск git svn fetchэффективно завершает операцию клонирования. Надеюсь!

Брэндон Ярбро
источник
7
вам нужно будет использовать git svn rebaseпосле выборки, чтобы завершить операцию и получить основную ветку, отражающую ствол
Ромуальд Брюне
Не могли бы вы предоставить ссылку на сообщение в блоге для дальнейшего использования?
jmanning2k
6

Как сказали VonC, CaptainAwesomePants и Archi, все git svn fetchделают свое дело. Я делал а, git svn clone url... --authors-file=path/to/fileи клон не удался, потому что одного из авторов не было в файле авторов. Я добавил автора в файл и запустил, git svn fetchи он продолжил с того места, где он остановился, и, глядя на журнал git позже, кажется, что он использовал только что добавленного автора для замены имени автора коммита, так что все было мило.

Том Салиба
источник
5

По крайней мере, с git 2.1.0 вы можете продолжить, просто перевыпустив git svn clone

Однако это приведет к дублированию некоторых записей в вашем .git / config, удалите их, и все будет в порядке

Зан-xhipe
источник
From at least git 2.1.0...Есть идеи, существовала ли эта функция в git 1.9.1?
CivFan
Извините, у меня больше нет репозиториев svn, чтобы попробовать это.
zan-xhipe
git svn fetchвызвало несоответствие контрольной суммы для меня - и было невозможно сбросить, потому что явно не было HEAD: / - но это работает нормально, просто нужно было удалить svn-remote.fetchиз.git/config
OLL 02