Нет. Ваш лучший выбор состоял бы в том, чтобы настроить зеркало репозитория SVN в специализированном репозитории мерзавца.
git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin git@example.com:project.git
git push origin master
Тогда можно добавить репозиторий мерзавца как подмодуль к исходному проекту
cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"
существует одно концептуальное различие между svn:externals и подмодулем мерзавца, который может сбить Вас с толку, если Вы приближаетесь к этому с точки зрения подрывной деятельности. Подмодуль мерзавца привязан к пересмотру, что Вы даете его. Если "восходящие" изменения, то необходимо обновить ссылку подмодуля.
Поэтому, когда мы повторно синхронизируем с восходящей подрывной деятельностью:
cd /path/to/mysvnclone
git svn rebase
git push
... проект мерзавца будет все еще использовать исходный пересмотр, который мы фиксировали ранее. Для обновления ГОЛОВЕ svn необходимо было бы использовать
cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
Поршень переписывается для поддержки этого и обратного, плюс существующий URL Подрывной деятельности в Subvresion репозитории и git+git.
Выезд поршень репозиторий GitHub .
, К сожалению, это, кажется, не было выпущено.
I just went through this. I'm doing something similar to rq, but slightly different. Я настраиваю один из своих серверов для размещения этих git-клонов необходимых мне репозиториев svn. В моем случае мне нужны только версии, доступные только для чтения, и мне нужно чистое репо на сервере.
На сервере, который я запускаю:
GIT_DIR=<projectname>.git git init
cd <projectname>.git/
GIT_DIR=. git svn init svn://example.com/trunk
GIT_DIR=. git svn fetch
git gc
Это устанавливает мое чистое репо, затем у меня есть скрипт cron для его обновления:
#!/usr/bin/python
import os, glob
GIT_HOME='/var/www/git'
os.chdir(GIT_HOME)
os.environ['GIT_DIR']='.'
gits = glob.glob('*.git')
for git in gits:
if not os.path.isdir(git):
continue
os.chdir(os.path.join(GIT_HOME, git))
if not os.path.isdir('svn/git-svn'):
#Not a git-svn repo
continue
#Pull in svn updates
os.system('git svn fetch && git gc --quiet')
#fix-svn-refs.sh makes all the svn branches/tags pullable
os.system('fix-svn-refs.sh')
#Update the master branch
os.system('git fetch . +svn/git-svn:master && git gc --quiet')`
Для этого также требуется fix-svn-refs.sh из http://www.shatow.net/fix-svn-refs.sh В основном это было вдохновлено: http://gsocblog.jsharpe.net/archives/12
Я не уверен, зачем здесь git gc
, но я не смог чтобы выполнить git pull
без него.
Итак, после всего этого вы можете использовать подмодуль git, следуя инструкциям rq.
В дополнение к тому, что сказал rq, другим методом может быть использование стороннего проекта "externals" (http://nopugs.com/ext-tutorial), который лучше имитирует работу внешних ссылок svn. С помощью externals вы можете отслеживать как git, так и svn репозитории, и это выглядит проще для продвижения ваших изменений вверх по течению в эти репозитории. Однако это требует от участников проекта загрузки и установки отдельного пакета.
Я еще не использовал подмодули или внешние модули; однако я потратил несколько часов на чтение обо всех альтернативах, и похоже, что внешние модули будут лучше подходить для моих нужд. Эти и другие пользовательские методы отлично обсуждаются в главе 15 книги "Контроль версий с помощью Git" Джона Лолигера (http://oreilly.com/catalog/9780596520120), которую я настоятельно рекомендую.