Почему git svn show-ignore / show-externals так медленно работает?


Я пишу универсальный сценарий миграции svn -> git, который позволяет намного больше, чем стандартный git svn clone, и на одном этапе моего сценария я проверяю выходные данные git svn show-externals и git svn show-ignore для каждой ветви в мигрирующем репозитории и предпринимаю различные шаги в зависимости от выходных данных этих команд.

Моя проблема сейчас заключается в том, что в то время как остальная часть моего сценария выполняется довольно быстро, эти две команды, в частности, похоже, занимают подавляющее большинство мое рабочее время. В некоторых случаях запуск git svn show-externals занимает более 10 минут (для РЕПО, содержащего около 5000 файлов). Когда вы работаете в репозитории такого размера с 10 или более ветвями, вы можете себе представить, что это значительно увеличивается.

Почему выполнение этой операции занимает так много времени? Могу ли я что-нибудь сделать, чтобы ускорить его исполнение?
1 3

1 ответ:

"git svn show-ignore" выполняет дополнительный запрос SVN для каждого каталога.

Для целей миграции, возможно, вы захотите взглянуть на инструмент SubGit. Он переводит svn: игнорировать -> .gitignore для каждой ревизии (а также переводит svn:EOL-стиль, теги и так далее). Единственное ограничение: требуется локальный доступ SVN к репозиторию. Таким образом, он может использоваться в сочетании с инструментом svnrdump. Если у вас есть хранилище SVN локально, миграция выполняется в одном Шаг:

$ subgit install path/to/svn/repo