Инструменты для поддержания филиалов в SVN - PullRequest
5 голосов
/ 29 марта 2010

Моя команда использует SVN для контроля версий. Недавно я работал над веткой со случайным слиянием из ствола, и это был довольно раздражающий опыт (см. «Subversion Story # 1» Джоэла Спольски), поэтому я искал альтернативные способы управлять филиалами и слиянием. Учитывая, что централизованный репозиторий SVN не подлежит обсуждению, мне нужен набор инструментов, которые удовлетворяют следующим условиям.

  1. Полная история изменений должна храниться в SVN как для магистрали, так и для ветвей.

  2. Слияние в любом направлении (и, возможно, перекрещивание) должно быть относительно безболезненным.

  3. История слияния должна храниться в SVN в максимально возможной степени.

Я посмотрел как git-svn, так и bzr-svn, и ни один из них, похоже, не подходит для работы - в принципе, учитывая историю изменений, которую они могут экспортировать из репозитория SVN, они, похоже, не могут работать лучше обработка заданий сливается, чем может SVN. Например, после клонирования репозитория с git история изменений для моей ветви показывает исходную ветвь вне магистрали, но git не "видит" ни одно из промежуточных слияний SVN, поскольку "родные" слияния - ревизия История - это одна длинная линия. В результате любые попытки слияния из транка в git приводят к такому же количеству конфликтов, как и слияние SVN. (Кроме того, git-svn документация явно предупреждает против использования git для объединения ветвей.)

Есть ли способ настроить мой рабочий процесс, чтобы git удовлетворял вышеуказанным требованиям? Может быть, мне просто нужны советы или хитрости (или отдельный инструмент слияния?), Чтобы помочь SVN лучше объединяться в ветви?

1 Ответ

2 голосов
/ 29 марта 2010

Не имея чистого ответа SVN, я хотел бы сослаться на вопрос SO " Как обмануть git-svn, чтобы распознать слияния, сделанные с svn? "

Я рекомендовал выполнять эти слияния git в специальной ветке, но более простым решением было бы записать (по крайней мере, самые последние) слияния SVN в клонированном репо git-svn с файлом git grafts Порядок преобразования:

  o-...-A---o---D--- unstable
 /       
X-----B---M---o---o--- stable

в

  o-...-A---o---D--- unstable
 /       \ 
X-----B---M---o---o--- stable

, упрощающий процесс git merge, перед dcommit и отправкой его обратно в SVN.

...