На работе я использую git-svn против репозитория SVN ~ 170000 ревизий. Я использовал git-svn init
+ git-svn fetch -r...
, чтобы ограничить мою первоначальную выборку разумным количеством ревизий. Вы должны быть осторожны, чтобы выбрать ревизию, которая действительно находится в той ветке, которую вы хотите. Все полностью функционально, даже с усеченной историей , за исключением git-blame
, которая, очевидно, приписывает все строки старше, чем ваша начальная версия, первой версии.
Вы можете еще больше ускорить это с помощью путей игнорирования для удаления ненужных поддеревьев.
Вы можете добавить больше ревизий позже, но это будет болезненно. Вам нужно будет сбросить карту оборотов (к сожалению, я даже написал git-svn reset
, и я не могу сказать, что она удалила все ревизии, так что это может быть сделано вручную). Затем git-svn fetch
больше ревизий и git-filter-branch
, чтобы переопределить ваш старый корень для нового дерева. Это перепишет каждый коммит, но не повлияет на сами исходные двоичные объекты. Вы должны сделать аналогичную операцию, когда люди берут большие перегруппировки в SVN-репо.
Если вам на самом деле нужны все ревизий (например, для миграции), тогда вам следует взглянуть на некоторую разновидность svn-fast-export + git-fast-import. Может быть один, который добавляет теги rev для соответствия git-svn, и в этом случае вы можете быстро импортировать, а затем просто перенести в удаленный svn. Даже если в существующих опциях svn-fast-export такой функции нет, вы, вероятно, можете добавить ее до того, как ваш исходный клон завершится!