Как вы развертываете из SVN, когда ваш исходный репозиторий находится в Git - PullRequest
7 голосов
/ 27 января 2009

Моя команда разрабатывает с использованием Git, используя многие его функции. Мы значительно более эффективны в использовании git, чем SVN.

Однако наш текущий клиент хочет, чтобы мы развернули код из репозитория svn, что означает, что мы должны как-то регулярно перемещать наш код из git в svn.

В данный момент мы поддерживаем каталог, который является одновременно svn checkout и git repo (содержит .git и т. Д.), И мы можем затем сделать мерзавец; SVN коммит

Конечно, этот процесс немного сложнее, так как мы хотим использовать теги для записи точек релиза, и есть накладные расходы на запуск svn add для файлов, созданных git.

Каков наилучший способ сделать это?

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

Ответы [ 3 ]

6 голосов
/ 27 января 2009

Если один человек считается интегратором всего кода для SVN, и вы знаете, что никто не участвует в репозитории SVN, вы можете попросить его использовать git-svn для внесения изменений:

  1. Интегратор использует свой master в качестве ветви отслеживания для SVN (например, Git SVN Clone $ REPO). Он никогда не работает в этой ветке
  2. Разработчики работают в обычном режиме (предположительно в тематических ветках, с несколькими основными ветвями интеграции)
  3. Когда вы хотите сделать релиз, интегратор вытягивает весь код разработчика в свою основную ветку (не master, а что-то вроде integration)
  4. Интегратор делает все, что нужно, чтобы выпуск был готов к работе
  5. Интегратор сливается integration со своим master
  6. Интегратор делает git svn dcommit

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

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

1 голос
/ 27 января 2009

Ответ davetron5000, вероятно, в основном то, что вы хотите. Впрочем, это будет хитрость. Если вы настроили дерево интеграторов так, чтобы в нем было удаленное хранилище для хранилища svn и удаленное для исходного дерева git, я подозреваю, что git не распознает их как связанные. Вам, вероятно, понадобится настроить файл трансплантатов, который объясняет git, что они имеют общую историю. В противном случае слияния всегда будут конфликтовать.

Похоже, эта статья поможет понять, как правильно ее настроить, с использованием git grafts для восстановления истории слияния svn .

0 голосов
/ 07 января 2015

текущий клиент хочет, чтобы мы развернули код из репозитория SVN ...

... можете ли вы удовлетворить это требование, выполнив всю разработку из GIT-репозитория и запустив сценарии сборки, которые извлекают снимок для сборки в Subversion?

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

> svn co https://github.com/restOfProjectURL/tags/BUILD-TAG-JAN-1-2015

или

> svn co https://github.com/restOfProjectURL/branches/DEV-BRANCH-FIXES

Если ваши сценарии сборки включают эту проверку (или что-то подобное) для создания локального рабочего каталога и последующего развертывания оттуда, технически вы развертываете из Subversion и можете использовать Git для всего остального.

(это было с помощью https://help.github.com/articles/support-for-subversion-clients/)

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