Мне это тоже нужно было, и с помощью ответа Бомбе + немного повозиться, я заставил его работать. Вот рецепт:
Импорт 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
заново.