Могу ли я восстановить историю репозитория SVN из локального репозитория git-svn?

971
James

Наша команда разработчиков в настоящее время использует SVN для управления разработкой наших веб-приложений. Разработчик, управляющий сервером SVN, пытается перенести его со старого сервера Win XP на другой сервер, но попытаться вывести дамп хранилища не удается (повреждение или что-то в этом роде). Почему это не так - это отдельный вопрос.

Разработчик, управляющий репозиторием SVN, предложил экспортировать текущий HEAD старого репо для использования в качестве основы нового репозитория SVN, но мы потеряем всю нашу историю SVN. Я использую git-svn локально, что означает, что у меня есть 1,5 года коммитной информации, хранящейся локально. Есть ли способ получить эти коммиты из git-svn и поместить их в новый репозиторий SVN?

1
Вставьте коммиты в новый репозиторий Git. : D grawity 13 лет назад 0

1 ответ на вопрос

0
Darth Android

Если вы создаете новое пустое репозиторий SVN, можете ли вы вставить все коммиты из git-svn прямо в репо? (я не использовал git или git-svn, но это то, что я сделал бы с одним из моих репозиториев hg, если мне нужно было поместить его в репозиторий svn)

Редактировать: мне удалось заставить это работать с ручным перебазированием через Mercurial. Единственное, что кажется особенным, это ручная перебазировка вместо автоматической перебазировки svn. Вы можете попробовать это в git-svn перед тем, как добавить в смесь Mercurial.

  1. Создать новый SVN Repo: svnadmin create targetSVN
  2. Сделайте начальную фиксацию на новом репозитории SVN:

    svn co file://targetSVN svnCopy cd svnCopy
    touch test
    svn add test; svn commit -m "Initial Import"

  3. Проверьте репо через hg:hg clone file://targetSVN hgCopy; cd hgCopy
  4. Извлеките изменения из git (через hg-git):hg pull git://yourrepo.git
  5. Ручная перебазировка: hg rebase -s tip -d 0( 0должен быть исходным SVN-коммитом и tipдолжен быть главой материала, который вы извлекли из git. Убедитесь, что наборы изменений git являются линейными (без слияний!). Замените tipфактический номер набора изменений головки git (найден через hg heads) при необходимости). Примите все удаленные изменения, когда он спрашивает о конфликтах.
  6. hg pushпока все изменения в репозитории svn. Это выдвигает 1 набор изменений за раз.
git-svn, похоже, не так хорошо справляется с несколькими удаленными репозиториями svn; он не хочет отменить мои изменения во втором репозитории svn-remote. Я не знаю, правильно ли он перебрасывает все коммиты на базовый коммит нового репо ... James 13 лет назад 0
Что произойдет, если вы создадите новое репо, проверьте его с помощью git-svn, извлеките изменения из первого репозитория git-svn, выполните ребазинг и затем нажмите? Darth Android 13 лет назад 0
После перемещения основной ветки из первого репозитория git-svn во вторую ветвь репозитория git-svn, `git svn dcommit` завершается с ошибкой" Невозможно определить восходящую информацию SVN из истории HEAD. Возможно, репозиторий пуст. At / usr / lib / git-core / git-svn line 522. " `git svn info` также перестал работать с той же ошибкой. James 13 лет назад 0
Попробуйте выполнить первоначальный коммит в репозитории svn и сначала потяните его. Просто «дотроньтесь» до файла, зафиксируйте его и удалите после импорта данных. Darth Android 13 лет назад 0
Не повезло, я все еще не смог dcommit перебазированные коммиты из оригинального git-svn. James 13 лет назад 0
Мне удалось заставить его работать через hgsubversion, но это был бы сумасшедший рабочий процесс. Я отредактирую его в своем ответе на случай, если вы захотите его использовать. Darth Android 13 лет назад 0
Спасибо за помощь с решением. У меня была проблема с шагом № 5, но это потому, что у меня также был каталог с именем test, поэтому я переделал его с помощью `touch svn-file`. Тем не менее, шаг № 6 для меня не получается, с "abort: Извините, не могу найти svn родителя ревизии слияния". James 13 лет назад 0
Похоже, у вас где-то есть слияния в истории (вы не можете вставить слияния в SVN из hgsubversion или git-svn). Если вы просматриваете историю в таком инструменте, как tortoisehg, показывает ли он ветвление и слияние в истории репо? Darth Android 13 лет назад 0
Да, это звучит знакомо. Я полагаю, это довольно сложная задача, и, к сожалению, мы только что укусили пулю и отбросили историю. Я решил поделиться своим репозиторием с любым из моих коллег, которым нужна старая история. James 13 лет назад 0