Использование Git и SVN с Git в качестве центрального сервера

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

Примечание. Я видел, что Github теперь предоставляет доступ SVN к своим репозиториям Git. Кто-нибудь знает, как они это делают?


person kelloti    schedule 17.12.2010    source источник
comment
Github использует шлюз SVN-to-Git собственной разработки. До сих пор они хранили молчание о раскрытии исходников; Я сомневаюсь, что они будут.   -  person cdhowie    schedule 17.12.2010
comment
Еще немного предыстории: мы используем gitolite для сервера git. Возможно, кто-то должен ходатайствовать / помочь gitolite найти решение?   -  person kelloti    schedule 17.12.2010
comment
Это явно неверный ответ, но я бы сказал им: «Крутой #$@!», вы используете git для этого проекта.   -  person haydenmuhl    schedule 17.12.2010
comment
@haydenmuhl - мне нравится! к сожалению, я не думаю, что это сработает   -  person kelloti    schedule 17.12.2010
comment
Либо они используют git, либо они не получают контракт.   -  person user502515    schedule 17.12.2010


Ответы (3)


Да, вы можете использовать SubGit:

Создать пустой репозиторий SVN

$ svnadmin create path/for/svn/repository

Настройте его для связи с вашим репозиторием Git с помощью SubGit:

$ subgit configure path/for/svn/repository
$ #edit path/for/svn/repository/conf/subgit.conf to set git.default.repository (absolute or relative path to your bare Git repository)

Запустить непрерывную синхронизацию:

$ subgit install path/for/svn/repository

В результате интерфейсы SVN и Git будут доступны для чтения и записи.

Насколько я знаю, GitHub использует другой подход: они реализовали интерфейс SVN, который обращается к Git на лету. Подход имеет свои преимущества и недостатки.

person Dmitry Pavlenko    schedule 22.08.2012
comment
Это отличный вариант. Если бы это было доступно 1,5 года назад :( - person kelloti; 22.08.2012

Грубый способ, который я могу придумать, - настроить репозиторий svn внутри вашей сети, проверить оттуда, используя git-svn, добавить ваш реальный репозиторий git в качестве удаленного, извлечь оттуда и вставить в удаленный svn. Я не знаю, будет ли он работать и надежен ли он, но он должен создать что-то вроде зеркала. Вы можете синхронизировать свою сторону, используя некоторые хуки, которые срабатывают, когда происходит push для обновления зеркала SVN. Что касается обратного (когда ваши клиенты фиксируются в репозитории SVN), вам придется придумать что-то еще для этого.

person Noufal Ibrahim    schedule 17.12.2010
comment
Да, я думал об использовании хуков как способе синхронизации SVN и git, но это кажется невероятно подверженным ошибкам, поэтому я надеялся, что у кого-то есть некоторый опыт в этом. - person kelloti; 17.12.2010
comment
Ну, у тебя странная проблема, так что... :) - person Noufal Ibrahim; 17.12.2010

Хорошо, я отвечу на свой вопрос плохим, но выполнимым ответом (imo). Я могу использовать стандартные файлы патчей для отправки изменений между нашими двумя компаниями. Мой менеджер считает, что это приемлемое решение, но мне оно очень не нравится


РЕДАКТИРОВАТЬ: В ответ на Noufal Ibrahim, я думаю, что, используя Tailor в сочетании с скриптами-ловушками, я мог бы получить автоматизированное решение, которое действительно может работать. Этот блог имеет отличное описание использования Tailor для настройки зеркала SVN.

person kelloti    schedule 17.12.2010
comment
Ну, есть quilt и Настройте, что может сделать вашу жизнь немного проще. - person Noufal Ibrahim; 17.12.2010