Мне это тоже нужно было, и с помощью ответа Бомбе + немного повозиться, я заработал. Вот рецепт:
Импорт Git -> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
После # 3 вы получите загадочное сообщение, подобное этому:
Используя более высокий уровень URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Просто игнорируй это.
Когда вы запустите # 5, вы можете получить конфликты. Решите их, добавив файлы с состоянием «unmerged» и возобновив их перебазирование. В конце концов, вы закончите; затем выполните синхронизацию с репозиторием SVN, используя dcommit
. Это все.
Синхронизация репозиториев
Теперь вы можете синхронизироваться из SVN в Git, используя следующие команды:
git svn fetch
git rebase trunk
И для синхронизации из Git в SVN используйте:
git svn dcommit
Конечная нота
Возможно, вы захотите попробовать это на локальной копии, прежде чем применять к живому репозиторию. Вы можете сделать копию своего репозитория Git во временное место; просто используйте cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверьте рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграть с вещами, прежде чем вносить какие-либо длительные изменения.
Приложение: Если вы испортили git svn init
Если вы случайно запустили git svn init
неправильный URL-адрес и не были достаточно умны, чтобы сделать резервную копию своей работы (не спрашивайте ...), вы не можете просто выполнить эту же команду еще раз. Однако вы можете отменить изменения, выполнив:
rm -rf .git/svn
edit .git/config
И удалить раздел [svn-remote "svn"]
раздела.
Вы можете запустить git svn init
заново.