Ветвление с помощью Mercurial SCM - PullRequest
7 голосов
/ 20 января 2010

Итак, сейчас я изучаю Ruby on Rails и работаю над книгой «Гибкая веб-разработка с Rails». Я также решил, что хочу попробовать Mercurial, потому что я читал о распределенных SCM, и это кажется идеальной ситуацией. Тем не менее, я все же предпочитаю передавать свой код удаленно на свой Linux VPS, только если мой жесткий диск решает погрузиться.

Итак, мой вопрос относится к ветвлению в Mercurial. Сейчас у меня настроен удаленный репозиторий, и я могу легко передавать изменения по SSH (черт возьми, я даже создал сайт Nginx FastCGI, который также позволяет мне продвигаться). Однако я хотел бы создать ветки для каждой главы, пока я над ними работаю, так что я могу сохранить хорошую организованную историю моего прогресса в книге. Вот что я делаю:

$ hg branch chapter-10
(do chapter 10 stuff)
$ hg commit -m "Chapter 10 complete"
$ hg update default
$ hg merge chapter-10
$ hg commit -m "Merging chapter 10 into default"
$ hg push

Как только я выполняю оператор push, я получаю сообщение от Mercurial:

pushing to ssh://myserver/hg/depot
searching for changes
abort: push creates new remote branch 'chapter-10'!
(did you forget to merge? use push -f to force)

Итак, в этот момент я снова пытаюсь сделать hg merge, и он говорит мне, что нечего объединять, что, очевидно, верно, потому что я только что слил это. Когда я нажимаю клавишу -f, все выглядит нормально, и даже веб-интерфейс показывает соответствующие ветви.

Подводя итог, мой вопрос прост: правильно ли я поступаю? Есть ли более подходящий способ сделать это с Mercurial (то есть "Mercurial way")? Честно говоря, я просто хочу, чтобы хранилище служило резервной копией. Я фанат распределенной модели SCM, но мне кажется, что она немного "грязная", чтобы вызывать толчки. Любое понимание очень ценится! Заранее спасибо.

Ответы [ 3 ]

6 голосов
/ 20 января 2010

push -f - правильный вариант для вашего случая, и в прошлом месяце обсуждался вопрос о добавлении этой команды при появлении этого предупреждения "push creates new remote branch": см. выпуск 1513 .

Тем не менее, выпуск 1974 (в этом месяце) упоминает некоторые нежелательные эффекты (но не в вашем случае).
См. Эту переведенную статью , чтобы узнать больше о создании второй головыв удаленном репо.


В более общем плане вы можете использовать ветвь, если вы пишете свою главу параллельно, и вы хотите объединить их только в определенный (стабильный) момент времени

Но если ваш процесс написания более линейный, вы можете использовать только одну ветвь и добавить несколько тегов.
Однако, если вы вернетесь к главе 10 и добавите несколько строк, даже если вы уже поставилитеги 11 и 12, которые затруднят чтение истории.Так что ветки все еще хорошая идея в этом случае.

4 голосов
/ 20 января 2010

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

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

Теги (или метки) используются в основном для создания маркера, обозначающего некоторую важность для версии кода. Как, например, если вы хотите отметить завершение главы 10, вы просто помечаете все текущие версии тегом chapter-10. Нет необходимости разветвляться. Вы можете переходить с теговой версии в любой момент в будущем, если это будет необходимо по какой-либо причине.

2 голосов
/ 20 января 2010

В этом случае я чувствую, что вполне нормально использовать -f для push.Он просто создает новые ветви, а не головы.Создание удаленных головок - совсем другое дело.

...