Повторно включить зеркалирование с помощью git -svn

В течение некоторого времени я зеркалировал репозиторий Subversion в репозитории Git. Что всегда хорошо срабатывало. Однако из-за сбоя виртуального сервера и отсутствия резервной копии мне нужно снова настроить зеркало. Репозиторий, который мне нужно отслеживать, составляет почти 1200 коммитов большой и содержит много файлов (что является основной причиной для зеркала Git, так как он намного быстрее проверяет копию репо).

Теперь мне нужно сделать, чтобы мое недавно клонированное зеркало Git снова отслеживало репозиторий Subversion. У меня нет проблем с добавлением нового пула ref, но я не могу понять, как можно снова вывести svn в ветвь Git.

Одна ошибка, которую я, кажется, получаю: Unable to determine upstream SVN information from working tree history.

Как повторно включить зеркалирование репозитория Subversion в существующем ветки Git, который только за пару совершает транзакцию из репозитория Subversion?

Ответ 1

Самый простой способ заставить его работать снова - скопировать в каталог .git/svn из оригинала, так как здесь отслеживаются дополнительные метаданные svn (при условии, что конфигурация git -svn - то же самое).

Однако, поскольку у вас его нет, попробуйте следующее:

  • git svn init http://hostname/svn/repository с любыми другими параметрами, которые вы использовали раньше (возможно, -s?)

  • git checkout последняя фиксация из svn.

  • Создайте git-svn ref: git update-ref refs/remotes/git-svn HEAD (или если вы использовали -s, вместо этого это должно быть refs/remotes/trunk)

  • Извлеките последнее из svn с момента текущей фиксации: git svn fetch --parent. Это должно перестроить метаданные git -svn для всей вашей истории.

Ответ 2

Я нашел другой метод в http://trac.parrot.org/parrot/wiki/git-svn-tutorial:

Добавление метаданных git -svn в клон github

Если вы хотите повторно заполнить метаданные SVN, которые можно быстро выполнить взяв ваш обновленный клон leto repo из gihub и добавив это для вашего .git/config

[svn-remote "svn"]
        url = https://svn.parrot.org/parrot
        fetch = trunk:refs/remotes/trunk

Затем запустите эту команду, чтобы найти "верхний фиксатор"

 git show origin/upstream | head -n 1

и поместите этот хэш в файл .git/refs/remotes/trunk (очевидно, замените значение с помощью одной из приведенной выше команды)

 echo c85aaa38b99cedb087e5f6fb69ce6d4a6ac57a0b > .git/refs/remotes/trunk

и, наконец,

 git svn fetch