Как конвертировать SVN-репозиторий в Git на Windows - PullRequest
4 голосов
/ 06 января 2012

У нас есть удаленный svn-репозиторий, и мы хотим, чтобы он конвертировался в git.Подскажите, пожалуйста, как это можно сделать в Windows?Спасибо.

Ответы [ 4 ]

1 голос
/ 06 октября 2017

Установить приложение в Windows:

Найдите svn-репозиторий URL и скопируйте его

Примерно так:
enter image description here

Вызов диалогового окна TortoiseGit Clone

Щелкните правой кнопкой мыши по папке назначения, например, D:\SVN\ToGit и нажмите Git Clone...
enter image description here

Установите флажок From SVN repository

enter image description here

Если вы сначала скопировали URL-адрес, а затем вызвали диалоговое окно клонирования, TortoiseGit получит скопированный URL-адрес из буфера обмена и вставит его в текстовое поле URL-адреса. Таким образом, вы не вставляете это самостоятельно. Просто посмотрите на это, чтобы убедиться, что это правильно.

И если вы щелкнете правой кнопкой мыши по папке назначения, TortoiseGit также заполнит текстовое поле Directory для вас. Также посмотрите, хотите ли вы этого.

Итак, просто установите флажок From SVN repository.

И если хранилище SVN имеет стандартную компоновку, скажем, trunk, tags, branch, , вам не нужно ничего делать дальше.

Нажмите кнопку OK, чтобы перейти

Затем, начиная клонировать svn-репозиторий в git-репозиторий.
Примерно так:

enter image description here

Как видите, TortoiseGit просто правильно использует команду Git for Windows git svn clone для клонирования.

git.exe svn clone "svn://svn.code.sf.net/p/tortoisesvn/code/" "D:\SVN\ToGit\tsvn" -T trunk -b branches -t 

Таким образом, вы можете пойти Git Bash / CMD и повторно использовать эту командную строку, а также получить тот же результат.

ПРИМЕЧАНИЕ: Если вы видите r1, r2, r3 ..., вы можете в любой момент остановить клонирование и возобновить его позже, используя ту же командную строку.


Клонировать локальный svn-репозиторий

С TortoiseGit 2.4.4 +

Просто скопируйте локальный путь svn в URL диалога Clone. См:
enter image description here
Снова Установите флажок From SVN repository

Клонирование:
enter image description here

TortoiseGit 2.4.4 + будет использовать file:/// протокол для клонирования локального хранилища SVN.


После того, как вы получите git-репозиторий, вы можете сделать коммит там. И отправьте коммит обратно в исходный svn-репозиторий, используя TortoiseGit ->SVN DCommit..., что-то вроде svn commit.

enter image description here

enter image description here

Как видите, команда git svn dcommit.

И если в исходном svn-репозитории есть какие-то новые коммиты, которые необходимо обновить, вы можете использовать TortoiseGit ->SVN Rebase, чтобы извлечь коммит svn, а затем объединить / перебазировать последний коммит. Что-то вроде svn update.

enter image description here

Он использует git svn fetch, затем использует git rebase, чтобы объединить / перебазировать извлеченные изменения.

enter image description here

Для командной строки вы можете просто использовать git svn rebase.


Прочтите Pro Git v2 - Глава 9 для получения дополнительной информации и примеров.

0 голосов
/ 09 апреля 2019

Я так много сделал, я сделал пакетный скрипт, чтобы помочь:

использование: SvnToGit <path/to/svn-repo> <local-checkout-dir> <remote-git-url>

Предпосылки

  • У вас уже должен быть URL-адрес пустого удаленного репозитория git.
  • У вас должен быть предварительно существующий файл author.txt в корневом каталоге, готовый к идти.
  • Если Git не понимает ваш формат SVN, вам нужно будет запустить svnserve для «обслуживания» репо. Вы можете создать службу окна, чтобы сделать, как то так:

    c:> sc create svnserve binpath = "\" svnserve.exe \ "--service -r C: \ Users \ Имя_папки \ Svn" displayname = "Сервер Subversion" зависимость = запуск Tcpip = авто

Предостережения:

  • Проверьте промежуточные результаты, иногда что-то может не получиться
    (особенно svn клон).
  • Обратите внимание на раздел для ручных изменений, если это необходимо для тегов. Возможно, это можно было сделать в пакетном файле, но казалось, сложный и не высокий приоритет для меня. Здесь есть ПАУЗА, поэтому
    Вы можете внести эти изменения вручную.
  • Я не проверял это на многих системах, возможно, вам придется настроить скрипт немного подстраивается под вашу систему.

Фактический пакетный файл:

REM Argument 1: Path to your repository
REM Argument 2: Path to your new Git working directory
REM Create authors.txt file
REM It will contain lines like:
REM SomeCoder = Some Guy <some.guy@example.com>
REM If Git is now aware of the format of svn repository, you will need to use svnserve:
REM svnserve -d -R --root path/to/your/repository
PAUSE

IF EXIST bare.git\NUL RD /S /Q bare.git
IF EXIST GitTemp\NUL RD /S /Q GitTemp

REM The following will not work, if SVN is using a newer FS than what Git is aware of
REM git svn clone file:///%1 --prefix=svn/ --no-metadata -A authors.txt --stdlayout GitTemp
REM So, use
git svn clone svn://localhost/%1 --prefix=svn/ --no-metadata -A authors.txt --stdlayout GitTemp
PAUSE

REM GitIgnore
cd GitTemp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m "Convert svn:ignore properties to .gitignore."
cd ..

REM Bare Repo
git init --bare bare.git
cd bare.git
git symbolic-ref HEAD refs/heads/trunk
cd ..

cd GitTemp
git remote add bare ../bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare master
cd ..

REM clean up SVN type stuff
cd bare.git
REM git branch -m trunk master
git branch -m svn/trunk master
git symbolic-ref HEAD refs/heads/master
cd ..

REM Manual changes if needed for tags
REM git for-each-ref --format='%(refname)' refs/heads/tags |
REM cut -d / -f 4 |
REM while read ref
REM do
REM   git tag "$ref" "refs/heads/tags/$ref";
REM   git branch -D "tags/$ref";
REM done
PAUSE

REM Working Directory
git clone bare.git %2

cd %2
git checkout master

git remote remove origin
PAUSE

git remote add origin %3
REM Then
git push -u origin master
0 голосов
/ 23 августа 2018

Контекст: Удаленный сервер SVN с огромным хранилищем нескольких проектов. Однако я только хотел перенести один проект из SVN в Git

Вот как я это сделал:

Требования:

  1. Расширения Git - Расширения Git
  2. Visual SVN Server (также получить eval лицензию) - Visual SVN Server
  3. Менеджер пакетов шоколадных окон - Шоколадный
  4. Git версии 2.6.2 (используйте chocolatey в cmd: choco install git --version 2.6.2)

Что делать:

1. Получить пользователей, которые внесли в файл авторов

Откройте cmd для корня локальной копии проекта SVN и запустите:

svn log -q | awk -F '|' '/ ^ r / {sub ("^", "", $ 2); sub ("$", "", $ 2); print $ 2 "=" $ 2 "<" $ 2 ">"} '| sort -u> авторы-transform.txt

Поместите полученный файл авторов туда, где вы можете его найти

Откройте и отредактируйте файл author-transform.txt, добавив имя и адрес электронной почты в <> построчно для каждого коммиттера


2. Скопируйте ваш SVN-репозиторий с сервера на локальный на вашем рабочем диске (пример: c: / repo / Repository


3. Установите Visual SVN и укажите хранилище сервера в папке / repo

Также найдите открытый порт для запуска на

Установка разрешений на аутентификацию для окон для сервера Возможно, вам придется создать пользователя для сервера, а также Также установите разрешения для конкретного проекта на сервере для вашего пользователя

4. В папке назначения для вашего нового клонированного репозитория SVN удерживайте Shift и нажмите «Git Browse», чтобы открыть Git Extensions, перейдите в «Пуск» и нажмите «Клонировать SVN

».

Укажите локальный сервер SVN, который вы создали для пункта назначения (пример http://localhost/svn/repo/Repository/Development/ProjectName)

Я снял флажок, теги и ветви, но YMMV

Укажите файл авторов на то место, где он был сохранен

Нажмите клон


Причины:

Git 2.6.2, потому что это была последняя версия, которая не вызывала проблемы с адресом

Git Extensions, поскольку он минимизировал всю работу командной строки для клонирования

Visual SVN, потому что у меня были проблемы с разрешениями на сервере, а команды "git svn" лучше реагировали на адрес http://localhost....., чем на файл: //, который предлагался во многих местах, которые я исследовал

Chocolatey, потому что я не видел другого способа получить эту версию Git

0 голосов
/ 06 января 2012

Вы можете использовать git-svn - инструмент, который позволяет вам конвертировать svn-репозитории в git-репозитории. См. git документацию для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...