Я прочитал руководство по Git, FAQ, Git - SVN и т.д., и все они объясняют то и это, но нигде не найти такой простой инструкции, как:
SVN хранилище в: svn://myserver/path/to/svn/repos
Git репозиторий в: git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
Я не ожидаю, что это будет так просто, и я не ожидаю, что это будет одна команда. Но я ожидаю, что он не будет пытаться объяснить что-либо - просто сказать, какие шаги предпринять в этом примере.
svn
git
version-control
git-svn
Милан Бабушков
источник
источник
Ответы:
Magic:
Git и SVN работают очень по-разному. Вам нужно изучить Git, и если вы хотите отслеживать изменения из SVN upstream, вам нужно учиться
git-svn
. Наgit-svn
главной странице есть хороший раздел с примерами :источник
Создайте файл пользователей (т.е.
users.txt
) для отображения пользователей SVN в Git:Вы можете использовать этот однострочный шаблон для создания шаблона из вашего существующего хранилища SVN:
SVN остановится, если найдет отсутствующего пользователя SVN, которого нет в файле. Но после этого вы можете обновить файл и забрать, где вы остановились.
Теперь извлеките данные SVN из хранилища:
Эта команда создаст новый Git-репозиторий
dest_dir-tmp
и начнет извлекать SVN-репозиторий. Обратите внимание, что флаг "--stdlayout" подразумевает, что у вас есть общая структура SVN "trunk /, branch /, tags /". Если ваш макет отличается, ознакомятся с--tags
,--branches
,--trunk
варианты (в целомgit svn help
).Все общие протоколы допускаются:
svn://
,http://
,https://
. URL должен быть нацелен на базовый репозиторий, что-то вроде http://svn.mycompany.com/myrepo/repository . Строка URL должна не включать/trunk
,/tag
или/branches
.Обратите внимание, что после выполнения этой команды очень часто выглядит, что операция «зависла / зависла», и вполне нормально, что она может застрять на долгое время после инициализации нового репозитория. В конце концов вы увидите сообщения журнала, которые указывают, что он мигрирует.
Также обратите внимание, что если вы опустите
--no-metadata
флаг, Git добавит информацию о соответствующей ревизии SVN в сообщение фиксации (т.е.git-svn-id: svn://svn.mycompany.com/myrepo/<branchname/trunk>@<RevisionNumber> <Repository UUID>
)Если имя пользователя не найдено, обновите ваш
users.txt
файл:Возможно, вам придется повторить эту последнюю команду несколько раз, если у вас большой проект, пока не будут получены все коммиты Subversion:
После завершения Git извлечет SVN
trunk
в новую ветку. Любые другие филиалы настроены как удаленные. Вы можете просмотреть другие ветви SVN с:Если вы хотите сохранить другие удаленные ветви в своем хранилище, вы должны создать локальную ветку для каждой из них вручную. (Пропустите trunk / master.) Если вы этого не сделаете, ветви не будут клонированы на последнем шаге.
Теги импортируются как ветки. Вы должны создать локальную ветку, создать тег и удалить ветку, чтобы они были в Git как теги. Чтобы сделать это с тегом "v1":
Клонируйте свой GIT-SVN-репозиторий в чистый Git-репозиторий:
Локальные ветви, которые вы создали ранее из удаленных ветвей, будут скопированы только как удаленные ветви в новый клонированный репозиторий. (Пропустите trunk / master.) Для каждой ветви, которую вы хотите сохранить:
Наконец, удалите пульт из вашего чистого Git-репозитория, который указывает на удаленный временный репозиторий:
источник
Чисто перенесите свой репозиторий Subversion в репозиторий Git . Сначала вы должны создать файл, который сопоставляет имена авторов ваших коммитов Subversion с коммиттерами Git, скажем
~/authors.txt
:Затем вы можете загрузить данные Subversion в Git-репозиторий:
Если вы на Mac, вы можете получить
git-svn
от MacPorts, установивgit-core +svn
.Если ваш subversion-репозиторий находится на том же компьютере, что и желаемый git-репозиторий, вы можете использовать этот синтаксис для этапа инициализации, в противном случае все то же самое:
источник
=
вusers.txt
потому , что импорт был прерывание , и я получаю пустой репозиторий.file:///
отказался работать, просто я использовал,svnserve.exe --daemon
а затем использовалsvn://localhost/home/user/repo
вместо.authors.txt
вutf-8 without BOM
.git svn init
, аgit svn config
затем, наконец,git svn fetch
так было проще чтобы сделать это таким образом, я должен был получить несколько раз, чтобы сделать это правильно. Единственная строка cmcgintygit svn clone
, которая выполняет все три, была слишком запутанной для меня.Я использовал скрипт svn2git и работает как шарм.
источник
Я предлагаю освоиться с Git, прежде чем пытаться использовать git-svn постоянно, то есть сохранять SVN в качестве централизованного репо и использовать Git локально.
Однако, для простой миграции со всей историей, вот несколько простых шагов:
Инициализируйте локальный репо:
Отметьте, как далеко вы хотите начать импортировать ревизии:
(или просто "git svn fetch" для всех оборотов)
На самом деле получить все с тех пор:
Вы можете проверить результат импорта с помощью Gitk. Я не уверен, что это работает в Windows, работает в OSX и Linux:
Если у вас есть SVN-репозиторий, клонированный локально, вы можете захотеть перенести его в централизованное Git-репо для упрощения совместной работы.
Сначала создайте ваше пустое удаленное репо (может быть, на GitHub ?):
Затем, при необходимости, синхронизируйте основную ветку, чтобы операция извлечения автоматически объединяла удаленный мастер с вашим локальным мастером, когда оба содержат новый материал:
После этого вас может заинтересовать мой собственный
git_remote_branch
инструмент, который помогает работать с удаленными ветками:Первый пояснительный пост: " Git отдаленные ветки "
Продолжение самой последней версии: « Время сотрудничать с git_remote_branch »
источник
git push origin master
Существует новое решение для плавного перехода от Subversion к Git (или для одновременного использования обоих): SubGit .
Я работаю над этим проектом сам. Мы используем SubGit в наших репозиториях - некоторые из моих товарищей по команде используют Git и некоторые Subversion, и пока это работает очень хорошо.
Чтобы перейти с Subversion на Git с SubGit, вам нужно запустить:
После этого вы получите Git-репозиторий в svn_repos / .git и можете клонировать его, или просто продолжать использовать Subversion и этот новый Git-репозиторий вместе: SubGit гарантирует, что оба будут всегда синхронизированы.
Если ваш репозиторий Subversion содержит несколько проектов, в каталоге svn_repos / git будет создано несколько репозиториев Git. Чтобы настроить перевод перед запуском, сделайте следующее:
С SubGit вы можете перейти на чистый Git (не git-svn) и начать использовать его, сохраняя при этом Subversion столько времени, сколько вам нужно (например, для уже настроенных инструментов сборки).
Надеюсь это поможет!
источник
subgit import
команды) даже не требует лицензии. Точный переводsvn:ignore
свойства в.gitignore
файлы также включен.git svn
.Смотрите официальную страницу git-svn . В частности, посмотрите в разделе «Основные примеры»:
источник
Pro Git 8.2 объясняет это: http://git-scm.com/book/en/Git-and-Other-Systems-Migrating-to-Git
источник
SubGit (против синего экрана смерти)
Это все.
+ Чтобы обновить из SVN, Git-репозиторий, созданный первой командой.
Я использовал способ мгновенного перехода на Git для огромного хранилища.
Конечно, вам нужна подготовка.
Но вы можете вообще не останавливать процесс разработки.
Вот мой путь.
Мое решение выглядит так:
Миграция занимает много времени для большого хранилища SVN.
Но обновление завершенной миграции всего за несколько секунд.
Конечно, я использую SubGit , мама. мерзавец делает меня синим экраном смерти . Просто постоянно. И git-svn утомляет меня фатальной ошибкой Git « слишком длинное имя файла ».
ШАГОВ
1. Скачать SubGit
2. Подготовьте команды переноса и обновления.
Допустим, мы делаем это для Windows (портирование на Linux тривиально).
В каталоге bin установки SubGit (subgit-2.XX \ bin) создайте два файла .bat.
Содержимое файла / команды для миграции:
Команда «пуск» здесь необязательна (Windows). Это позволит увидеть ошибки при запуске и оставить оболочку открытой после завершения SubGit.
Вы можете добавить сюда дополнительные параметры, аналогичные git-svn . Я использую только --default-domain myCompanyDomain.com, чтобы исправить домен адреса электронной почты авторов SVN.
У меня есть стандартная структура репозитория SVN (ствол / ветви / теги), и у нас не было проблем с «отображением авторов». Так что я больше ничего не делаю.
(Если вы хотите перенести теги, такие как ветви, или ваш SVN имеет несколько папок веток / тегов, вы можете использовать более подробный подход SubGit )
Совет 1 : Используйте --minimal-revision YourSvnRevNumber, чтобы быстро увидеть, как все происходит (какая-то отладка). Особенно полезно видеть разрешенные имена авторов или электронные письма.
Или ограничить глубину истории миграции.
Совет 2 : Миграция может быть прервана ( Ctrl+ C) и восстановлена путем запуска следующей команды / файла обновления.
Я не советую делать это для больших репозиториев. Я получил "Недостаточно памяти Java + Windows исключение".
Совет 3 : Лучше создать копию вашего голого хранилища результатов.
Содержимое файла / команды для обновления:
Вы можете запускать его любое количество раз, когда хотите получить последние коммиты команды в свой репозиторий Git.
Предупреждение! Не трогайте ваш голый репозиторий (например, создание веток).
Вы получите следующую фатальную ошибку:
3. Запустите первую команду / файл. Это займет много времени для большого хранилища. 30 часов для моего скромного хранилища.
Это все.
Вы можете в любое время обновить Git-репозиторий из SVN любое количество раз, запустив второй файл / команду. И до перехода вашей команды разработчиков на Git.
Это займет всего несколько секунд.
Есть еще одна полезная задача.
Перенесите ваш локальный репозиторий Git в удаленный репозиторий Git
Это твой случай? Давайте продолжим.
Запустить:
По умолчанию ваш Git не может отправлять большие куски. фатальный: удаленный конец неожиданно завис
Давайте бежать за это:
524288000 - 500 МБ, 1073741824 - 1 ГБ и т. Д.
Исправьте проблемы с местным сертификатом . Если ваш git-сервер использует испорченный сертификат.
У меня отключены сертификаты .
Также ваш Git-сервер может иметь ограничения по количеству запросов, которые необходимо исправить .
Запустите с локальным Git:
( git push origin '*: *' для старых версий Git)
Если вы получаете следующее: error: not not spit git: Нет такого файла или каталога ... Для меня полное воссоздание моего хранилища решает эту ошибку (30 часов). Вы можете попробовать следующие команды
Или попробуйте переустановить Git ( для меня бесполезно ). Или вы можете создавать ветви из всех ваших тегов и нажимать их. Или, или, или ...
источник
reposurgeon
Для сложных случаев репохирург Эрик С. Рэймонд является инструментом выбора. В дополнение к SVN, он поддерживает многие другие системы контроля версий через
fast-export
формат, а также CVS . Автор сообщает об успешных конверсиях древних репозиториев, таких как Emacs и FreeBSD .Этот инструмент, очевидно, нацелен на почти идеальное преобразование (например, преобразование
svn:ignore
свойств SVN в.gitignore
файлы) даже для сложных макетов репозитория с длинной историей. Во многих случаях другие инструменты могут быть проще в использовании.Прежде чем углубляться в документацию
reposurgeon
командной строки, обязательно прочитайте превосходное руководство по миграции DVCS, которое шаг за шагом описывает процесс конвертации.источник
Это руководство на веб-сайте atlassian является одним из лучших, которые я нашел:
https://www.atlassian.com/git/migration
Этот инструмент - https://bitbucket.org/atlassian/svn-migration-scripts - также очень полезен для генерации вашего author.txt среди прочего.
источник
Вы должны установить
Скопировано по этой ссылке http://john.albin.net/git/convert-subversion-to-git .
1. Получить список всех коммиттеров Subversion
Subversion просто перечисляет имя пользователя для каждого коммита. В коммитах Git гораздо больше данных, но в самом простом случае автору коммитов нужно указать имя и адрес электронной почты. По умолчанию инструмент git-svn просто перечислит имя пользователя SVN как в поле автора, так и в поле электронной почты. Но немного поработав, вы можете создать список всех пользователей SVN и их соответствующие имена и адреса электронной почты Git. Этот список может использоваться git-svn для преобразования простых имен пользователей svn в надлежащие коммиттеры Git.
Из корня вашей локальной проверки Subversion выполните эту команду:
Это захватит все сообщения журнала, вычеркнет имена пользователей, удалит любые дубликаты имен пользователей, отсортирует имена пользователей и поместит их в файл «hors-transform.txt ». Теперь отредактируйте каждую строку в файле. Например, конвертировать:
в это:
2. Клонировать хранилище Subversion, используя git-svn
Это выполнит стандартное преобразование git-svn (с использованием файла author-transform.txt, созданного на шаге 1) и поместит репозиторий git в папку «~ / temp» в вашем домашнем каталоге.
3. Конвертировать SVN: игнорировать свойства в .gitignore
Если в вашем репозитории svn использовались свойства svn: ignore, вы можете легко преобразовать это в файл .gitignore, используя:
4. Переместите репозиторий в пустой репозиторий git.
Сначала создайте пустой репозиторий и сделайте так, чтобы его ветвь по умолчанию соответствовала имени ветки svn «trunk».
Затем вставьте временный репозиторий в новый пустой репозиторий.
Теперь вы можете безопасно удалить ~ / temp репозиторий.
5. Переименуйте ветвь «ствол» в «мастер»
Ваша основная ветка разработки будет называться «стволом», что соответствует имени, которое было в Subversion. Вы захотите переименовать его в стандартную «основную» ветку Git, используя:
6. Очистите ветки и метки
git-svn превращает все теги Subversions в очень короткие ветви в Git в форме «теги / имя». Вы захотите преобразовать все эти ветви в фактические теги Git, используя:
Этот шаг займет немного времени. :-) Но не волнуйтесь; ваша оболочка unix предоставит> вторичную подсказку для очень длинной команды, которая начинается с git for-each-ref.
источник
GitHub теперь имеет возможность импортировать из репозитория SVN . Я никогда этого не пробовал.
источник
svn2git
программу, предложенную в другом ответе .Несколько расширенный ответ, использующий только git, SVN и bash. Он включает в себя шаги для репозиториев SVN, в которых не используется обычная компоновка с компоновкой каталогов транка / ветвей / тегов (SVN абсолютно ничего не делает для обеспечения реализации такой компоновки).
Сначала используйте этот сценарий bash, чтобы просканировать репозиторий SVN на предмет разных людей, которые внесли свой вклад, и сгенерировать шаблон для файла сопоставления:
Используйте это, чтобы создать
authors
файл, в котором вы сопоставляете имена пользователей svn с именами пользователей и электронной почтой, как установлено вашими разработчиками с помощьюgit config
свойствuser.name
иuser.email
(обратите внимание, что для такой службы, как GitHub, достаточно иметь только соответствующую электронную почту).Затем
git svn
скопируйте svn-репозиторий в git-репозиторий, рассказав ему о сопоставлении:git svn clone --authors-file=authors --stdlayout svn://example.org/Folder/projectroot
Это может занять невероятно много времени, так как git svn будет индивидуально проверять каждую ревизию для каждого существующего тега или ветви. (обратите внимание, что теги в SVN на самом деле являются просто ветвями, поэтому они заканчиваются в Git). Вы можете ускорить это, удалив старые теги и ветки в SVN, которые вам не нужны.
Запуск этого на сервере в той же сети или на том же сервере также может значительно ускорить это. Кроме того, если по какой-то причине этот процесс прерывается, вы можете возобновить его, используя
git svn rebase --continue
Во многих случаях вы сделали здесь. Но если у вашего репозитория SVN нетрадиционный макет, где у вас просто есть каталог в SVN, который вы хотите поместить в ветку git, вы можете сделать несколько дополнительных шагов.
Самое простое - просто создать новое SVN-репо на вашем сервере, которое следует соглашению, и использовать его
svn copy
для помещения вашего каталога в транк или ветку. Это может быть единственным способом, если ваш каталог полностью находится в корне репозитория, когда я в последний раз пытался этоgit svn
просто отказаться от проверки.Вы также можете сделать это, используя git. Для
git svn clone
просто использовать каталог вы хотите поставить в мерзавца отрасли.После запуска
Обратите внимание, что для этого требуется Git 1.7 или выше.
источник
Я опубликовал пошаговое руководство ( здесь ) по конвертации svn в git, включая преобразование svn-тегов в git-теги и svn-ветвей в git-ветки.
Укороченная версия:
1) клон svn из определенного номера ревизии. (номер редакции должен быть самым старым, который вы хотите перенести)
2) получить данные SVN. Этот шаг - тот, который занимает больше всего времени.
повторяйте git svn fetch, пока не закончите без ошибок
3) обновить мастер ветку
4) Создание локальных веток из SVN веток путем копирования ссылок
5) конвертировать svn-теги в git-теги
6) Поместите хранилище в лучшее место, например, github.
Если вам нужны подробности, прочитайте мой пост или спросите меня.
источник
Мы можем использовать
git svn clone
команды, как показано ниже.svn log -q <SVN_URL> | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors.txt
Выше команда создаст файл авторов из SVN коммитов.
svn log --stop-on-copy <SVN_URL>
Выше команда даст вам номер первой ревизии, когда ваш проект SVN был создан.
git svn clone -r<SVN_REV_NO>:HEAD --no-minimize-url --stdlayout --no-metadata --authors-file authors.txt <SVN_URL>
Приведенная выше команда создаст Git-репозиторий на локальном компьютере.
Проблема в том, что он не будет конвертировать ветви и теги в push. Вам придется делать их вручную. Например, ниже для филиалов:
Для тегов:
Теперь отправьте master, ветви и теги в удаленный репозиторий git.
утилита svn2git
Утилита svn2git удаляет ручные операции с ветками и тегами.
Установите его с помощью команды
sudo gem install svn2git
. После этого запустите команду ниже.$ svn2git <SVN_URL> --authors authors.txt --revision <SVN_REV_NO>
Теперь вы можете перечислять ветки, теги и легко нажимать их.
Представьте, что у вас 20 веток и тегов, очевидно, что svn2git сэкономит вам много времени, и поэтому мне это нравится больше, чем нативные команды. Это хорошая оболочка для родной
git svn clone
команды.Для полного примера, обратитесь к моей записи в блоге .
источник
TortoiseGit делает это. см. этот пост в блоге: http://jimmykeen.net/articles/03-nov-2012/how-migrate-from-svn-to-git-windows-using-tortoise-clients
Да, я знаю, что отвечать ссылками - это не здорово, но это решение, а?
источник
Я очень рекомендую эту короткую серию скринкастов, которые я только что обнаружил. Автор проведет вас через основные операции и продемонстрирует некоторые более сложные способы использования.
источник
Если вы используете SourceTree, вы можете сделать это прямо из приложения. Перейти к File -> New / Clone и сделать следующее:
Откройте репо в SourceTree, и вы увидите, что ваши коммит-сообщения тоже были перенесены.
Теперь перейдите в Repository -> Repository Settings и добавьте новые подробности удаленного репо. Удалите пульт SVN, если хотите (я сделал это с помощью опции «Редактировать файл конфигурации»).
Нажмите код для нового удаленного репо, когда вы будете готовы и код свободно.
источник
Для пользователей GitLab я изложил суть того, как я перешел с SVN:
https://gist.github.com/leftclickben/322b7a3042cbe97ed2af
Шаги по переходу с SVN на GitLab
Настроить
svn.domain.com.au
.http
(другие протоколы должны работать).git.domain.com.au
и:dev-team
.ssh git@git.domain.com.au
).favourite-project
создается вdev-team
пространстве имен.users.txt
содержит соответствующие данные пользователя, по одному пользователю на строку, формыusername = First Last <address@domain.com.au>
, гдеusername
указано имя пользователя в журналах SVN. (Подробности см. В первой ссылке в разделе «Ссылки», в частности, ответ пользователя Кейси).Версии
команды
Это оно! Перезагрузите страницу проекта в веб-интерфейсе GitLab, и вы увидите все коммиты и файлы в списке.
Ноты
git svn clone
команда остановится, в этом случае обновитсяusers.txt
,cd favourite-project
иgit svn fetch
продолжит с того места, где остановилась.trunk
-tags
-branches
макет для SVN - репозитория требуется.git svn clone
команде, останавливается на уровне, указанном вышеtrunk/
,tags/
иbranches/
.git svn clone
выдает много выходных данных, включая некоторые предупреждения вверху; Я проигнорировал предупреждения.источник
Кроме того, команда git-stash является находкой при попытке выполнить git с помощью git-svn dcommits.
Типичный процесс:
svn-dcommit
Решение (требуется git 1.5.3+):
источник
Вот простой сценарий оболочки без зависимостей, который преобразует одно или несколько SVN-репозиториев в git и отправляет их в GitHub.
https://gist.github.com/NathanSweet/7327535
Примерно в 30 строках скрипта это: клонирует с помощью git SVN, создает файл .gitignore из свойств SVN :: ignore, помещает в пустой репозиторий git, переименовывает ствол SVN в master, преобразует теги SVN в теги git и переносит его в GitHub сохраняя теги.
Мне пришлось очень тяжело перенести дюжину SVN-репозиториев из Google Code на GitHub. Это не помогло, что я использовал Windows. На моем старом компьютере с Debian была разбита всякая рубина, и заставить его работать на Windows было шуткой. Другие решения не работали с путями Cygwin. Даже когда я что-то заработал, я не мог понять, как заставить теги отображаться на GitHub (секрет --follow-tags).
В конце я соединил два коротких и простых сценария, связанных выше, и это прекрасно работает. Решение не должно быть более сложным, чем это!
источник
Я на Windows-машине и сделал небольшую серию для передачи репозитория SVN с историей (но без веток) в репозиторий GIT, просто вызвав
transfer.bat http://svn.my.address/svn/myrepo/trunk https://git.my.address/orga/myrepo
Возможно, кто-нибудь может использовать это. Он создает TMP-папку, проверяет репозиторий SVN с помощью git, добавляет новый источник и отправляет его ... и снова удаляет папку.
Вам все еще нужен файл users.txt с вашими отображениями пользователей, такими как
источник
Я просто хотел добавить свой вклад в сообщество Git. Я написал простой скрипт bash, который автоматизирует полный импорт. В отличие от других инструментов миграции, этот инструмент основан на нативном git, а не на jGit. Этот инструмент также поддерживает репозитории с большой историей ревизий и большими каплями. Это доступно через github:
https://github.com/onepremise/SGMS
Этот скрипт преобразует проекты, хранящиеся в SVN, в следующем формате:
Эта схема также популярна и поддерживается:
Каждый проект будет синхронизирован по имени проекта:
Если вы хотите преобразовать полный репо, используйте следующий синтаксис:
источник
Эффективное использование Git с Subversion - это нежное введение в git-svn. Для существующих SVN-репозиториев git-svn делает это очень просто. Если вы запускаете новый репозиторий, гораздо проще сначала создать пустой SVN-репозиторий, а затем импортировать его с помощью git-svn, чем в обратном направлении. Можно создать новый репозиторий Git и затем импортировать его в SVN, но это немного болезненно, особенно если вы новичок в Git и надеетесь сохранить историю коммитов.
источник
Загрузите установщик Ruby для Windows и установите последнюю версию вместе с ним. Добавьте исполняемые файлы Ruby на свой путь.
Затем введите «gem install svn2git» и введите
Migrate Subversion хранилище
Откройте командную строку Ruby и перейдите в каталог, куда должны быть перенесены файлы
Затем svn2git http: // [ имя домена ] / svn / [корень хранилища]
Перенос проекта в Git может занять несколько часов, в зависимости от размера кода проекта.
Этот важный шаг помогает создать структуру репозитория Git, как указано ниже.
Ствол SVN (/ Project_components) -> Git master Ветки SVN (/ Project_components) -> Git ветви Теги SVN (/ Project_components) -> Теги Git
Создайте удаленный репозиторий и отправьте изменения.
источник
У GitHub есть импортер. Создав репозиторий, вы можете импортировать его из существующего репозитория по его URL-адресу. Он запросит ваши учетные данные, если это применимо, и пойдет оттуда.
Во время работы он найдет авторов, и вы можете просто сопоставить их с пользователями на GitHub.
Я использовал его для нескольких репозиториев, и это довольно точно и намного быстрее! Это заняло 10 минут для репозитория с ~ 4000 коммитов, а после этого моему другу понадобилось четыре дня!
источник
Несколько ответов здесь приведены по адресу https://github.com/nirvdrum/svn2git , но для больших репозиториев это может быть медленным. Вместо этого я попытался использовать https://github.com/svn-all-fast-export/svn2git, который является инструментом с точно таким же именем, но использовался для переноса KDE из SVN в Git.
Немного больше работы, чтобы настроить его, но когда я закончил, само преобразование заняло минуты, когда другой скрипт потратил часы.
источник
Существуют разные методы для достижения этой цели. Я попробовал некоторые из них и нашел действительно работающий, только с установленным git и svn в ОС Windows.
Предпосылки:
svnadmin dump /path/to/repository > repo_name.svn_dump
Шаги для достижения конечной цели (переместить весь репозиторий с историей в git, сначала локальный git, затем удаленный)
Создайте пустой репозиторий (используя консольные инструменты или tortoiseSVN) в каталоге REPO_NAME_FOLDER
cd REPO_NAME_PARENT_FOLDER
, поместите dumpfile.dump в REPO_NAME_PARENT_FOLDERsvnadmin load REPO_NAME_FOLDER < dumpfile.dump
Подождите этой операции, это может быть долгоЭта команда молчит, поэтому откройте второе окно cmd:
svnserve -d -R --root REPO_NAME_FOLDER
почему бы просто не использовать file: /// ......? Потому что следующая команда не удастсяUnable to open ... to URL:
, благодаря ответу https://stackoverflow.com/a/6300968/4953065Создать новую папку SOURCE_GIT_FOLDER
cd SOURCE_GIT_FOLDER
Наконец, что мы получили?
Давайте проверим наш локальный репозиторий:
Видите ваши предыдущие коммиты? Если да - хорошо
Итак, теперь у вас есть полностью функциональный локальный репозиторий git с вашими исходниками и старой историей SVN. Теперь, если вы хотите переместить его на какой-нибудь сервер, используйте следующие команды:
В моем случае мне не нужна команда тегов, потому что в моем репозитории нет тегов.
Удачи!
источник
Преобразование подмодуля / папки svn MyModule в git с историей без тегов и веток.
Чтобы сохранить svn ignore list, используйте приведенные выше комментарии после шага 1
источник