Доступ к git-репозиторию с помощью svn (git-svnserver)? - PullRequest
16 голосов
/ 07 сентября 2010

Есть ли программа, которая делает то, что делает git-svn, но в ситуации, когда хранилище на сервере - git, а разработчик использует svn?

Я знаю, что github.com разрешает svn доступ к репозиториям git, которые они размещают, но не похоже, что они выпустили этот проект с открытым исходным кодом (пока?), И использование их серверов не вариантдля меня (даже не их частные репозитории).

РЕДАКТИРОВАТЬ: Я думаю, что я ищу параллель с 'git-cvsserver' - git-svnserver.В ходе небольшого поиска я нашел несколько 2-3-летних тем в списке рассылки git, но, похоже, никто не добился значительного прогресса.Я надеюсь, что кто-то может исправить меня.

Есть ли какие-либо проекты git-svnserver, которые в настоящее время находятся в стадии реализации?Я не хотел бы иметь дублирующее усилие, но кажется, что GitHub является самым дальним по , но никто другой не может иметь его.

Ответы [ 4 ]

10 голосов
/ 11 января 2012

Взгляните на SubGit .

SubGit - это решение на стороне сервера, оно обеспечивает доступ Subversion к репозиторию Git и наоборот.Вы можете обратиться к документация для получения более подробной информации, но в целом это довольно просто использовать SubGit :

SubGit требуется локальный доступ к репозиторию Git, к которому вы обращаетесь,Создайте репозиторий Subversion на том же компьютере:

    $ svnadmin create $SVN_REPOS

, затем выполните

    $ subgit configure $SVN_REPOS

Эта команда создает файл $SVN_REPOS/conf/subgit.conf, настройте его параметр git.default.repository следующим образом:

    [git "default"]
    repository = /path/to/your/git/repository.git

Вы можете указать много репозиториев Git, синхронизируемых с одним репозиторием Subversion, просто добавьте необходимые [git "identifier"] секции.

Вы также можете указать произвольный макет репозитория, например, стандартный выглядит так:

    trunk = trunk:refs/heads/master
    branches = branches/*:refs/heads/*
    shelves = shelves/*:refs/shelves/*
    tags = tags/*:refs/tags/*

Вы также можете настроить $SVN_REPOS/conf/authors.txt для сопоставления имен авторов SVN с идентификаторами git.

После этого запустите:

    $ subgit install $SVN_REPOS
    $ ... let initial translation complete ... 
    $ TRANSLATION SUCCESSFUL

На данный момент у вас есть хранилище Subversion и егоGit-аналог, который постоянно синхронизируется, т.е. SubGit немедленно переводит svn revision в git commit для каждого svn commit, а git commit в svn revision для каждого git push.

Таким образом, вы можете зафиксировать изменения в созданном хранилище Subversion и синхронизировать все изменения с основным хранилищем Git.

4 голосов
/ 28 октября 2010

Это код Python для обслуживания репозитория git по протоколу svn:

http://git.q42.co.uk/git_svn_server.git

2 голосов
/ 01 февраля 2015

SVNGit это именно то, что вы хотите. Это библиотека сервлетов с открытым исходным кодом для доступа клиентов SVN к репозиториям Git.

0 голосов
/ 08 сентября 2010

Я считаю, что ссылка git-svn предназначена для управления git (для мониторинга - rebase или dcommit - ветки SVN).
Это означает, что вы можете сначала клонировать любое необходимое вам git-репо на локальном сервере (где вы также используете SVN) и использовать это для команд git-svn между локальным Git-репо и вашим рабочим пространством SVN.

Как только ваше локальное Git-репо адекватно отражает ваше SVN-репо, вы можете вернуться на удаленный Git-сервер.

...