Как отследить удаленный публичный репозиторий Subversion с локальным репозиторием Git? - PullRequest
2 голосов
/ 17 декабря 2010

Я пытался понять это, прочитав man-страницу git-svn, но у меня возникают проблемы с пониманием того, как этого достичь.

Я хочу сделать следующее:

  1. Оформление общедоступного транка Subversion
  2. Создание локального репозитория git для отслеживания этого
  3. Создание ветки 'vendor', которую я не буду выполнять и буду использовать только для получения изменений изsubversion repo
  4. Создание веток git для исправлений, над которыми я хочу работать
  5. Загрузка обновлений в ветку 'vendor' и объединение с моими ветвями.
  6. Отправка исправлений в формате git-patch

Как мне этого добиться?

Ответы [ 2 ]

4 голосов
/ 17 декабря 2010

Рекомендуемый рабочий процесс для git-svn:

  1. Извлечение с использованием git-svn, упомянутого выше.
  2. По умолчанию вы будете в master.НЕ РАБОТАЙТЕ ПРЯМО В ЭТОМ ФИЛИАЛЕ.
  3. Делайте все свои разработки в ветви функций (используйте git checkout -b <feature> от master).
  4. Передайте изменения в вашей ветви функций.
  5. Сделайте git rebase master в вашей функциональной ветке.5а.Если вы хотите получить обновления svn в это время, переключитесь на master и выполните git svn rebase. Затем переключитесь обратно на ветвь объектов, выполните git rebase master.
  6. Переключитесь на основную ветвь и выполните git merge <feature>.
  7. Убедитесь, что объединение прошло гладко, затем выполните git svn dcommit чтобы отправить изменения в svn.

Помните, как только вы сделаете git svn dcommit, все ваши изменения станут видны другим.Поэтому убедитесь, что вы все сделали правильно, прежде чем делать git svn dcommit.

0 голосов
/ 17 декабря 2010

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

Создание вашего локального git-репо.

Как git-svn клонировать последние n ревизий из хранилища Subversion?

Для получения новых ревизий из SVN используйте git svn fetch. Это принесет новые ревизии и поместит их в удаленную ветку. Вы можете внести любые изменения в свою ветку, а затем зафиксировать, используя git svn dcommit.

Но я бы был осторожен с командой git merge. При использовании git-svn я всегда рекомендую использовать rebase и делать вашу историю строго линейной. SVN не может очень хорошо отслеживать ветки Git. Если у вас есть разветвленная история в git и вы пытаетесь отправить ее в svn, svn сможет представить только половину этой истории. Вы не потеряете ни один код, но вы потеряете детализацию ваших коммитов.

...