При импорте тега GIT снова загружает полную историю коммитов - PullRequest
0 голосов
/ 15 ноября 2018

У нас есть SVN-репозиторий с почти 190k коммитов.Локально я создал GIT-репозиторий, чтобы работать более комфортно.

Когда мне нужно обновить свой локальный GIT-репозиторий и извлечь новые коммиты в SVN-репозиторий, я использую эту комбинацию команд:

!git svn fetch && git svn rebase -l && git push . remotes/trunk:master && git push -f origin master

(находится здесь: https://lostechies.com/keithdahlby/2010/11/29/git-svn-aliases-git-up-and-git-dci/)

Все работает гладко, кроме случаев, когда кто-то создал тег в репозитории SVN: в этом случае git-svn загрузит полную историю дляэтот тег (от ревизии 1 до последней), который означает, что синхронизация вместо нескольких минут займет 10-15 часов.

Можно ли избежать всего этого? Может быть, команда I 'м не подходит?

Спасибо!

1 Ответ

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

Если вы выбираете несколько веток / тегов из SVN, то по умолчанию git svn пытается соединить их с последним общим предком. Поиск этого предка может быть очень дорогим - иногда git svn перечитывает всю историю хранилища.

С другой стороны, ваш псевдоним, похоже, касается только trunk игнорирования любых тегов и веток. Учитывая эту ситуацию, у вас есть несколько вариантов с различными последствиями:

  1. Настройте свой репозиторий git для точно одной ветви. не используйте опции -s или --stdlayout. Очевидно, вы будете синхронизировать только определенную часть репозитория SVN.

  2. Используйте опцию --no-follow-parent (и посмотрите раздел Обработка веток SVN для более подробного объяснения). В этом случае вы можете отслеживать несколько веток / тегов, но история нового тега / ветви не будет связана с его предком.

  3. В некоторых ситуациях git svn пытается перечитать историю от r0 до HEAD. Это происходит со 100 ревизиями на чанк, что может быть очень медленным для больших / старых репо. В этом случае вы можете попытаться ускорить процесс, используя опцию --log-window-size=3000 для git svn fetch (см. документ здесь ).

...