git-svn: переименовать ветку и использовать ее как новый SVN 'trunk' вместо использования 'merge --reintegrate'?
У меня есть проект Ruby on Rails, над которым я работаю, который использует SVN (1.6.17, Debian) для контроля версий. Локально я использую Git (2.5.4, OS X) с git-svn, и я работаю над веткой (называемой "ruby22rails42") для серьезного обновления проекта (используя новую версию фреймворка) и регулярно добавляю изменения от СВН "Магистраль", чтобы идти в ногу с проектом. Недавно я создал зеркальную ветвь ("/branches/v8.5-ruby22rails42") на нашем онлайн-сервере SVN, перенес туда свою локальную ветку Git и снова слил ее с trunk для других разработчиков.
Теперь я в основном хочу, чтобы "/branches/v8.5-ruby22rails42" был новым "стволом" и оставлял старый ствол SVN в качестве ветки с поддержкой версий (назовем это "/branches/v8.4-ruby19rails3"). К сожалению, svn merge --reintegrate не работает с ошибками "mergeinfo не поддерживается":
/opt/trunk$ svn merge --reintegrate ^/branches/v8.5-ruby22rails42
svn: Abfrage der Zusammenführungsinformationen wird von »file:///.../branches/v8.5-ruby22rails42« nicht unterstützt
Был бы svnadmin upgrade
исправить эту ошибку? Я не хочу обновлять утилиты SVN на сервере прямо сейчас, потому что к репозиторию SVN также обращаются многие другие инструменты.
Если не:
(Как) я могу просто переименовать транк как на SVN-сервере, так и в моем локальном репозитории git-svn и использовать мою ветвь в качестве нового "транка", чтобы вообще избежать утомительного процесса слияния в SVN? Как я скажу своему локальному репозиторию Git отслеживать этот процесс переименования? Это может потребовать от всех клиентов отказаться от локальных проверок и повторно проверить новую соединительную линию, но это будет приемлемо.
Если это невозможно или нежелательно, как избежать описанной выше ошибки mergeinfo при использовании Subversion 1.6.17 и успешно объединить мою ветку в транк? Затем я могу создать новую ветку из последнего коммита до слияния и сохранить его как мою ветку "v8.4-rails3ruby19".
1 ответ
Возможно, я что-то упустил в вашем контексте, но обычно вы не хотите заменять оригинальный тег, а скорее преуспеваете в этом. То, что я мог бы рассмотреть на вашем месте, это что-то вроде следующей последовательности:
Пометьте текущий ствол или / и создайте ветку быстрого исправления
/branches/v8.4-ruby19rails3
Слей свою ветку в ствол. Либо через svn, либо через git / git-svn
Например, следующая последовательность будет раздавить все ваши работы в вашем филиале и положить его в ствол:
git svn fetch
git checkout svn/trunk
git merge --squash ruby22rails42
git commit -m "Merged ruby22rails42"
git svn dcommit