Использование Hg локально и передача в репозиторий SVN, когда другие члены команды только работают над SVN - возможно ли это?

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

Вот ситуация: я работаю в небольшой команде, которая использует центральный SVN-репозиторий в качестве нашей системы контроля версий. Мой пара-программист и я были расстроены отсутствием возможности локальных коммитов (и не хотели испытывать трудности с использованием веток SVN), поэтому мы рассмотрели возможность использования Git или Mercurial в качестве клиента SVN и обнаружили, что hgsubversion кажется способным делать то, что мы хотим: локально работать с репозиторием Hg, фиксировать локально и передавать только SVN, когда мы будем готовы.

Когда пришло время толкать, мы получили это сообщение об ошибке от Hg:

Sorry, can't find svn parent of a merge revision.

Мне интересно, если проблема в том, что нам пришлось получать изменения из SVN для получения обновлений наших товарищей по команде, затем сливаться с нашими локальными изменениями, и теперь Hg не может понять, как сделать SVN счастливым? Похоже, это сообщение, которое я получаю от других вопросов и ответов, на которые я смотрел; однако, совет, который был распределен в тех случаях hg rebase --svnКажется, у нас тоже не работает; то же самое сообщение "Не удается найти svn-родителя".

Это вообще возможно? Или это больше проблем, чем стоит, когда другие разработчики в команде вносят изменения непосредственно в SVN?

2 ответа

Решение

Проблема в том, что hgsubversion не может выдвинуть слияния из Mercurial в Subversion. Пока вы не создадите никаких наборов изменений слияния, все должно работать нормально. (Слияния FWIW Subversion работают нормально, так как hgsubversion просто игнорирует информацию о слиянии и создает регулярные наборы изменений с одним родителем.) Описываемая вами проблема - одно из известных ограничений hgsubversion; другие перечислены в hg help subversion,

Чтобы обойти это, вы можете рассмотреть возможность использования rebase расширение, чтобы гарантировать, что история, чтобы толкать, идеально линейна.

Я занимаюсь этим уже больше года, и это прекрасно работает. Я получаю сладкую, сладкую любовь DVCS и остальных людей, э-э... нет. Я использую hgsubversion в качестве моего моста. У меня было немало проблем с hg-svn. YMMV.

Я использовал это для настройки и с тех пор люблю это!

Предупреждение: вы не можете использовать Mercurial для объединения изменений между ветками. Вы все еще можете работать на ветке (используйте hg up [some-branch]), но когда придет время объединить его в транк, вам нужно будет зафиксировать, нажать на some-branch, а затем использовать Subversion для слияния some-branch в багажник.

Я подготовил пост в блоге, который подробно описывает эту процедуру. Вы можете увидеть это здесь: http://xinmyname.tumblr.com/post/11305033055/subversion-mercurial-branches-oh-my

Удачи!

Другие вопросы по тегам