Работа локально с Git, когда основным хранилищем является SVN

Существует проект с открытым исходным кодом, который я хочу проверить и внести свой вклад. Основной репозиторий SVN, но я хочу работать в Git. Возможно ли это?

В большинстве моих поисков появляются подсказки, где вы переходите из SVN в Git (или наоборот) и не смотрите назад.

  • Если я закажу проект, внесите изменения и перетащите его в ветвь, созданную в Github, как я должен уведомить об этом авторов?
  • Как трудно включить вклад, сделанный в репозитории Git в репозитории SVN?
  • Просто сравнивая две версии (моя последняя проверка/вытягивание/обновление и моя локальная последняя фиксация), создайте патч из нее и отправьте ее им; следует ли это считать отложенным рабочим процессом или стандартным подходом?

Предположим, что оригинальные авторы не заинтересованы ни в чем другом, кроме SVN.

[Обновить] У меня нет и не хочу иметь доступ к репозиторию SVN. Я ищу обходные пути для этого.

[Update2] Если патчи действительно мой единственный вариант, есть ли какие-либо дополнительные оговорки, о которых я должен знать?

Ответ 1

К счастью, git-svn для этой цели. Это позволяет вам использовать git локально, а также иметь возможность проверять SVN, когда вы этого хотите. Это довольно просто и есть много информации, если вы ищете git-svn здесь или через Google.

Там есть учебник по http://flavio.castelli.name/howto_use_git_with_svn, который вы можете посмотреть вначале.

Изменить: Для создания совместимых с SVN различий вы можете использовать git diff --no-prefix. Обратите внимание, однако, что этот формат несовместим с TortoiseSVN. Если необходима совместимость, вам придется использовать какую-то оболочку script; см. пример здесь: http://mojodna.net/2009/02/24/my-work-git-workflow.html

Изменить: Один из возможных недостатков git -svn заключается в том, что он не обрабатывает внешние переменные svn. Вам придется обращаться с ними сами.

Удачи!

Ответ 2

Сохранение репозитория Git в синхронизации с репозиторием Subversion очень просто:

Клонировать репозиторий Subversion (в этом простом примере я игнорирую ветки/теги)

$ git svn clone https://url/to/repo/trunk

Следите за обновлениями с помощью соединительной линии Subversion:

$ git svn rebase

Теперь, если вы получили доступ к репо Subversion, вы можете нажать на свои изменения:

$ git commit
$ git svn dcommit

В противном случае отправкой патча является ваш единственный вариант, если коммиттеры в репозиторий Subversion не заинтересованы в использовании Git:

$ git diff 1cc92b96 > my_patch.patch

В этом случае, очевидно, лучше не делать коммитов для ветки, которую вы синхронизируете с репо Subversion.

Ответ 3

Да! Это возможно!

Отметьте это сообщение для деталей: http://www.romanenco.com/gitsvn

Есть три или четыре простых шага, чтобы сделать симбиоз SVN и Git SCM.

Я работал с этой технологией около трех месяцев и не испытывал никаких проблем. Это очень здорово! Когда ваше основное репо в SVN и вы можете совершать автономные коммиты и получать мощный от слияния Git.

Ответ 4

Если у вас нет и вы не хотите иметь доступ к репозиторию SVN, тогда комбинация git-svn и StGit может помочь. git-svn создает/обновляет клон, а stg поддерживает серию патчей поверх него (stgкоманды от StGit Crash Course):

git svn clone ..

stg new invent-some-patch-id
...edit patch description...
...hack hack hack in the tree...
stg refresh
...possibly hack some more...
stg refresh    
..
stg mail

Чтобы начать, см. StGIT Tutorial.

ПРИМЕЧАНИЕ. Я действительно не пробовал этот рабочий процесс.