Регулярное обновление git-репо из большого svn-репо - чем отличаются git svn fetch и git svn rebase? - PullRequest
0 голосов
/ 28 ноября 2018

У меня большой активный SVN-репозиторий (более 40 ГБ, более 35 000 версий).Он имеет нестандартную компоновку, тысячи веток и регулярно накапливает новые ветки.

У меня есть вторичный git-репозиторий, который я пытаюсь синхронизировать с SVN-репозиторием.Git-репозиторий существует ТОЛЬКО для поддержки точной копии истории изменений из SVN.Git-репозиторий никогда не используется в интерактивном режиме и никогда не накапливает контент, кроме SVN-репозитория.

Кажется очевидным, что многократный вызов «git svn fetch» ​​в конечном итоге будет делать то, что я хочу.Однако - хотя «git svn fetch» ​​ничего не создает заново из SVN - который уже присутствует в git - внутренне, «git svn fetch» ​​занимает очень много времени, чтобы выяснить, что сделано и где он остановился.

Я смотрел .git / svn / .metadata - и вижу, что "git svn fetch" работает через всю историю изменений SVN, чтобы выяснить, где он остановился.Для большого репозитория, такого как мой - «git svn fetch» ​​требуется много часов, чтобы вернуться к месту, где остановка выборки - после чего он возобновляет процесс переноса контента из SVN в репозиторий git.

Когда я пытаюсьчтобы найти более быстрые способы обновить git-репо новым контентом из SVN - я иногда вижу ссылки, предлагающие использовать «git svn rebase».Однако - если бы «git svn rebase» сделал то, что мне нужно, команда «git svn fetch» ​​была бы излишней (возможно, после получения начальной версии SVN для подготовки к загрузке?).Использование «rebase» также похоже на то, что оно находится в контексте рабочего состояния git.

Я должен ошибаться в некоторых важных отношениях об относительной функции «git svn fetch» ​​и «git svn».перебазироваться».Чем отличаются эти операции?

1 Ответ

0 голосов
/ 12 декабря 2018

Я до сих пор не знаю, чем fetch отличается от rebase.Тем не менее, что меня двигало, так это необходимость постепенно обновлять SVN для git в течение разумного периода времени (без пересмотра всех версий SVN в истории - до появления версий, еще не представленных в репозитории git).

Похоже, что это можно сделать с помощью «git svn fetch», но вам нужно добавить «--revision START: END».Где START - последняя версия SVN, добавленная в git-репозиторий, а END - последняя версия в SVN.Это показалось мне любопытным - потому что документация для "git svn fetch" не сообщает "--revision" как опцию.

Также сообщается, что важно - использование "--log-window = N",Где N - это значение порядка 10000 или 20000.

Производительность по-прежнему разочаровывает, но выглядит более обнадеживающей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...