В статье кратко описано как импортировать существующий GIT репозиторий в чистенький SVN со всей историей коммитов и пр.
Первый вопрос, который напрашивается – ЗАЧЕМ?
Отвечаю – просто проект разрабатывался в моем локальном репозитории, а после заказчик попросил разместить его в SVN. Можно, конечно, сделать это все одним большим Initial коммитом, но хочется чтоб история тоже импортировалась. Так вот, допустим имеется SVN репозиторий https://svn.example.com/repos/someproject/ со стандартной иерархией
https://svn.example.com/repos/someproject/
----/trunk
----/tags
----/branches
и локальный git репозиторий ~/workspace/someproject/ в котором находятся папочки
~/workspace/someproject/
----/.git
----/lib
----/config
----/…..
И мы хотим в SVN получить структуру
https://svn.example.com/repos/someproject/trunk/
----/lib
----/config
----/…..
Для работы с SVN из GIT устанавливаем пакет git-svn
- sudo apt-get install git-svn
Если делать по стандартной инструкции
- cd ~/workspace/someproject/
- git-svn clone https://svn.example.com/repos/someproject/trunk/ .
- git svn rebase
- git-svn dcommit
То появляется ошибка
Use of uninitialized value in concatenation (.) or string at /usr/bin/git-svn line 411.
Committing to …
Unable to determine upstream SVN information from HEAD history
Для исправления положения, после этой попытки, делаем следующее:
Убеждаемся, что версия GIT не ниже, чем 1.6.3
- git --version
Если так, то командуем
- git branch -a
* master
remotes/git-svn
Обратим внимание на строку remotes/git-svn (может отличаться)
Командуем:
- git rebase --onto remotes/git-svn --root master
И вуаля:
- git-svn dcommit
Если теперь выполнить
- git log
Еще раз, все команды по-порядку:
- cd ~/workspace/someproject/ #переходим в папку проекта (в которой находится папка .git)
- git-svn clone https://svn.example.com/repos/someproject/trunk/ . #"копируем" SVN репозиторий (на сам. деле при этом соответствующим образом конфигурируется GIT
- git branch -a #смотрим название ветки remotes/blablabla
- git rebase --onto remotes/git-svn --root master # remotes/git-svn берем из предыдущей команды
- git-svn dcommit # копируем GIT репозиторий в SVN со всей историей коммитов и пр.
Спасибо, очень полезно
Просмотри еще раз вставки кода, например, в "git –version" на сколько я понимаю "–" быть не должно, а должно быть "–" и т.д.
блин… порезало все… имелось ввиду – & # 8 2 1 1 ; (без пробелов конечно)
Да, есть у вордпресса такая фишка как типограф, который два тире превращает в дефис… Пока не смотрел как отключить, но в ближайшее время попробую
Да, поправил…
Пришлось в коде покопаться((
На всякий случай, в текущей версии Wordpress 2.9.1 чтобы — не заменялся на – & # 8 2 1 1 ; нужно в файле wp-includes/formatting.php в переменных $static_characters и $static_replacements удалить соответствующие элементы массивов
Вот теперь красота
Еще раз спасибо за статью