Рекомендуемый рабочий процесс для публичных и частных форков публичного репозитория, созданного в GIT-SVN

Я пытаюсь настроить три вещи:

  1. публичное зеркало GIT публичного репозитория SVN
  2. публичный форк этого репо, где несколько участников могут ставить патчи
  3. частный форк публичного репо из #2

Я знаю, как сделать #1, но ищу советы по #2 и #3: как настроить, как синхронизировать, что следует избегать и т. Д.

Вот больше деталей:

Я работаю с основанным на SVN веб-приложением с открытым исходным кодом, механизм отправки исправлений которого медленный и неэффективный: исправления прикрепляются к ошибкам, отправляемым в системе отслеживания ошибок, а спустя несколько недель или месяцев эти исправления попадают в ствол.

Отдельная проблема заключается в том, что мне нужно поддерживать частную ветвь проекта с дополнительными функциями, которые понадобятся только моей компании. Но я хочу, чтобы мой форк оставался в курсе последних официальных коммитов из багажника.

Я хотел бы выяснить решение обеих этих проблем на основе GitHub. Я хотел бы закончить с тремя вещами:

  • "mirror" - зеркало SVN GitHub, автоматически синхронизируемое с последними изменениями SVN с помощью автоматизированного процесса (как в этой статье), который я или другой участник патча запустим. Это позволит мне или кому-либо еще легко создать публичную или приватную ветвь проекта без возни с SVN.
  • "contrib" - для себя и нескольких авторов патчей, которым я доверяю, я бы хотел установить публичный ветвь (или ветвь?) "mirror", где мы можем фиксировать патчи, которые мы хотели бы видеть в конечном итоге в SVN. Это также может упростить и сделать более эффективными для основных коммиттеров извлечение исправлений обратно в SVN.
  • "ourfork" - наконец, наша компания не хочет создавать частную ветку "contrib", где несколько разработчиков могут добавлять частные функции, которые применимы только к реализации нашей компании.

Некоторые конкретные вопросы:

  • такой подход имеет смысл? Есть ли более простое решение, которое мы должны использовать вместо этого?
  • Как обеспечить синхронизацию "contrib" с "зеркалом"? Есть ли магия GitHub для автоматического применения новых коммитов, если они не конфликтуют? Предполагая, что нет, каков хороший рабочий процесс, чтобы обеспечить постоянную синхронизацию contrib с его родителем?
  • "ourfork" логически будет внуком "зеркала". Каков правильный рабочий процесс, чтобы поддерживать его в актуальном состоянии с изменениями из "mirror" и "contrib"? Должен ли я установить "contrib" как мой единственный пульт? Или настроить оба как удаленные - и если да, то каков правильный процесс для слияния?

Я прочитал ответ @ rq на похожий вопрос и подозреваю, что он отвечает на большинство вопросов выше, но я новичок в Git и не уверен, относится ли его ответ к моему делу.

2 ответа

Я бы порекомендовал вам взглянуть на SubGit. Это инструмент для создания и синхронизации Git-репозитория, связанного с SVN-репозиторием. Он имеет преимущества перед другими решениями, такими как:

  • одновременное безопасное принятие (поэтому, если один из участников вносит изменения в Git, а другой - в SVN в течение одной миллисекунды, ничего плохого не произойдет: если их изменения вступят в конфликт, один из них просто получит "устаревшую" ошибку)
  • лучший перевод SVN SVGit понятий, таких как игнорирование, EOL, произвольные ветви (не только master), тэги и так далее.

Но есть ограничение: у вас должен быть доступ к серверу SVN, поэтому, возможно, ваше решение на основе GitHub не будет работать. Но вы можете взглянуть на замены GitHub, такие как GitLab, Luna-tool и другие ( Git Server, как GitHub?).

Я не могу дать полный ответ, так как ваши настройки довольно сложны.

Я, возможно, попытался бы получить одного из коммитеров SVN на борту. Затем я бы назначил его ответственным за перебазирование ветвей функций поверх клона git-svn, а затем повторное внесение изменений в Subversion. Недавно я сделал очень простой пример этого рабочего процесса в виде скриншота.

Однако для этого требуется очень тесная петля обратной связи с одним из коммиттеров SVN, и для сохранения линейности истории вам придется много перебазировать, что снова затрудняет синхронизацию распределенных репозиториев. Я не уверен, что это сработает для вас.

Другие вопросы по тегам