Как синхронизировать удаленные ветви с транком, используя git-svn - PullRequest
7 голосов
/ 07 февраля 2012

Я использую git-svn для работы с svn-репозиторием. Макет является стандартным, и я создал локальный репозиторий с:

$ git svn clone -s http://mysvnrepo
(master)$ 

Мне нужно работать на удаленной (svn) ветке - MyBranch, поэтому я создал локальную ветку для отслеживания удаленной:

(master)$ git checkout -b localMyBranch remotes/MyBranch
(localMyBranch)$

Я продолжаю работать и отправлять сообщения в местный филиал, а иногда я делаю dcommit:

(localMyBranch)$ git svn dcommit

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

(localMyBranch)$ git svn dcommit
(localMyBranch)$ git checkout master
(master)$ git svn rebase

И что теперь? Я читал, что это НЕ правильный путь:

(master)$ git checkout localMyBranch
(localMyBranch)$ git rebase master

Как это запутать информацию о слиянии для SVN.

Так каков наилучший способ «перебазировать» мою удаленную ветку svn в удаленную магистраль, сохранив информацию о слиянии для svn?

1 Ответ

7 голосов
/ 08 февраля 2012

Вы захотите создать локальную рабочую ветвь для обработки вашего слияния. Ключ в том, что вам нужна ветка, которая не отслеживает активно удаленную ветку svn.

Попробуйте это:

(localMyBranch)$ git checkout -b merge_work
(merge_work)$ git merge master
(merge_work)$ git checkout localMyBranch
(localMyBranch)$ git rebase merge_work

и наоборот для слияния в другую сторону.

EDIT

Если вы используете git-svn 1.7.7 или новее, есть параметр конфигурации, который указывает git-svn заполнять свойство mergeinfo в удаленном хранилище:

git config --global svn.pushmergeinfo true
...