В команде git svn
была ошибка, из-за которой ветка master могла оставить что-то, кроме ствола svn, при первоначальном импорте хранилища svn.Это было исправлено в git v1.6.5 и новее (в v1.6.5-rc0 ~ 75 , если у вас есть git).
Если вы уже закончили проверять репозиторий svnи чтобы убедиться, что основная ветвь указывает на ствол svn, выполните следующие действия.
ПРИМЕЧАНИЕ: В этих инструкциях предполагается, что вы зафиксировали или сохранили все локальные изменения, которые вы сделали.Используйте git stash save
, чтобы сохранить любую незафиксированную работу, и git branch newbranchname
, чтобы создать ветку для вашего последнего коммита.
Переключитесь на основную ветку, используя git checkout master
, если вы еще не там.,Используйте git branch
, чтобы увидеть вашу текущую ветку, которая со звездочкой ('*') рядом с ней.
Запустите git svn info
и отметьте "URL:
"поле.Если URL указывает на транк, то все готово.Следующие git svn dcommit
будут фиксировать транк из главной ветви.
Если git svn info
указывает на тег или URL-адрес ветви, запустите git log
и найдите первый коммит, который имеетURL-адрес "git-svn-id:
", который указывает на URL-адрес вашей соединительной линии SVN.Скопируйте 40-символьный хеш коммита (в строке, начинающейся с «коммита»), который представляет этот коммит.
Сбросьте основную ветвь в хеш коммита с помощью git reset --hard commit-hash
вместо "commit-hash
"с хэшем коммита из шага 3.
ПРИМЕЧАНИЕ: Этот шаг самый опасный!Убедитесь, что вы сохранили всю свою работу!При необходимости создайте архив из своего рабочего каталога.
Запустите git svn info
еще раз, чтобы убедиться, что в поле "URL:
" указано, что вы находитесь на внешней линии.Если этого не произойдет, вы скопировали неверный хеш коммита в шаге 3. Перейдите к шагу 3. и попробуйте снова.
Запустите git svn rebase
, чтобы обновить основную ветвь до последней версии магистралив вашем хранилище SVN.
Pro Совет: Эксперты заметят, что вы можете анализировать строку "git-svn-id:
" в нижней части каждого журнала фиксации, чтобы определить,конкретный коммит находится на транке, на теге или на ветке.Таким образом, достаточно использовать git log master
, чтобы проверить, указывает ли первый коммит в ветви master на URL-адрес соединительной линии вашего хранилища svn.