В этом посте я опишу, как я работаю с ветками Mercurial в NetBeans почти без использования командной строки, а самое главное, как закрывать ветви в NetBeans, чтобы они не оставались в диалоговых окнах.
Допустим, мы разработали и вчера внедрили функционал А, а сегодня уже заняты разработкой функционала Б, который частично меняет А, но выяснили, что в функционале А есть ошибка, которую нужно срочно исправить. Здесь помогут ветви. Мы создаём новую ветвь, допустим с именем "feature-b", фиксируем текущие наработки, даже если они неработоспособны. Затем переключаемся на ветвь по умолчанию, делаем исправление ошибки функционала А, фиксируем, внедряем. А затем снова возвращаемся в ветвь "feature-b" и продолжаем разработку.
При необходимости, можно объединить исправление ошибки из ветки по умолчанию, чтобы продолжить разработку в исправленном коде. Если работаем командой, то одновременно можно вести разработку нескольких функционалов в нескольких ветвях, по необходимости объединяя изменения. Такой подход позволяет оставлять ветвь по умолчанию всегда работоспособной, что удобно для системы непрерывного интегрирования.
1. Создание ветви доступно из контекстного меню проекта: Mercurial -> Ветвь -> Создать ветвь.
Создать ветвь можно как перед началом разработки, так и после того, как код уже написан.
Пусть мы выбрали для ветви имя "feature-x".
2. Теперь можно фиксировать изменения, все они будут попадать в созданную ветвь. Но при попытке вытолкнуть изменения в общий репозиторий, NetBeans скажет, что требуется объединение, а в консоли напишет, что необходимо использовать "--new-branch" для создания удалённой ветви. Сделать это нужно вручную с использованием командной строки:
hg push --new-branch
Это единственная команда, которая требует ручного использования командной строки при работе с ветвями.
3. Допустим, мы завершили разработку нового функционала и хотим посмотреть, как система работает вместе с изменениями, которые коллеги внесли в ветвь по умолчанию. Для этого используем меню Группа -> Объединить -> Объединить изменения
Здесь нужно выбрать ветвь по умолчанию. Произойдет слияние, и в нашей ветке окажутся все текущие изменения ветви по умолчанию, если такие были. Если конфликтов нет, то можно фиксировать результат объединения.
4. Когда разработка функционала завершена, нужно перенести изменения в ветвь по умолчанию. Для этого мы переключаемся на ветвь по умолчанию Mercurial -> Ветвь -> Переключение ветви, выбираем "default" и жмём кнопку.
5. Теперь нужно объединить ветвь по умолчанию с нашей разработкой: Группа -> Объединить -> Объединить изменения, выбираем нашу ветвь "feature-x" и жмём кнопку.
6. Если какие-то изменения из ветви по умолчанию мы ранее не объединили с ветвью "feature-x", то у нас будут правки, которые нам нужно зафиксировать.
После этого мы будем находиться в ветви по умолчанию, в которой будет функционал из
ветви "feature-x". Можно приступить к разработке следующего.
7. После нескольких итераций 1-6 мы обнаруживаем, что список ветвей, которые нам предлагаются для переключения и объединения в NetBeans нам теперь мешает.
Мы можем закрыть эти ветви полностью. Для этого переключаемся на ветвь "feature-x", затем нажимаем Mercurial -> Ветвь -> Закрыть ветвь. Нас попросят зафиксировать это изменение.
Можно с сообщение описать "Closed branch feature-x".
8. Ветвь закрыта, нужно переключится на ветвь по умолчанию (см. пункт 4).
9. Хоть ветвь "feature-x" теперь закрыта, но в ней появилась новая фиксация (та, что о закрытии) и NetBeans будет постоянно нам предлагать объединиться с ней. Мы так и сделаем:
Группа -> Объединить -> Объединить изменения, выбираем ветвь "feature-x" и жмём кнопку.
Но так как изменений в коде не было, NetBeans не может ничего предложить для фиксации, поэтому нам придется сделать одну любую мелкую правку, например, добавить пустую строку в файл, изменение которого не влияет на систему. Фиксируем это. При этом у нас фиксируется объединение закрытой ветви и NetBeans не предлагает нам её ни в меню переключения ветви, ни в меню объединения ветви. Что нам и нужно было.
Недостаток: у нас один лишний ничего не значащий комит (тот, что из ветви 9).
Где же особенности? Особенности - это пункт 2 и пункт 9.
О ветвях
Кратко, но с примером. Использование ветвей позволяет быстро и легко переключать код из состояния долгосрочной разработки некоторого функционала в состояние, в котором нужно внести, например, быструю правку.Допустим, мы разработали и вчера внедрили функционал А, а сегодня уже заняты разработкой функционала Б, который частично меняет А, но выяснили, что в функционале А есть ошибка, которую нужно срочно исправить. Здесь помогут ветви. Мы создаём новую ветвь, допустим с именем "feature-b", фиксируем текущие наработки, даже если они неработоспособны. Затем переключаемся на ветвь по умолчанию, делаем исправление ошибки функционала А, фиксируем, внедряем. А затем снова возвращаемся в ветвь "feature-b" и продолжаем разработку.
При необходимости, можно объединить исправление ошибки из ветки по умолчанию, чтобы продолжить разработку в исправленном коде. Если работаем командой, то одновременно можно вести разработку нескольких функционалов в нескольких ветвях, по необходимости объединяя изменения. Такой подход позволяет оставлять ветвь по умолчанию всегда работоспособной, что удобно для системы непрерывного интегрирования.
Рабочий процесс с ветвями в NetBeans
Теперь ближе к цели поста. Опишу особенности версии NetBeans 7.2, так как в поздних версиях такие особенности могут быть изменены.1. Создание ветви доступно из контекстного меню проекта: Mercurial -> Ветвь -> Создать ветвь.
Создать ветвь можно как перед началом разработки, так и после того, как код уже написан.
Пусть мы выбрали для ветви имя "feature-x".
2. Теперь можно фиксировать изменения, все они будут попадать в созданную ветвь. Но при попытке вытолкнуть изменения в общий репозиторий, NetBeans скажет, что требуется объединение, а в консоли напишет, что необходимо использовать "--new-branch" для создания удалённой ветви. Сделать это нужно вручную с использованием командной строки:
hg push --new-branch
Это единственная команда, которая требует ручного использования командной строки при работе с ветвями.
3. Допустим, мы завершили разработку нового функционала и хотим посмотреть, как система работает вместе с изменениями, которые коллеги внесли в ветвь по умолчанию. Для этого используем меню Группа -> Объединить -> Объединить изменения
Здесь нужно выбрать ветвь по умолчанию. Произойдет слияние, и в нашей ветке окажутся все текущие изменения ветви по умолчанию, если такие были. Если конфликтов нет, то можно фиксировать результат объединения.
4. Когда разработка функционала завершена, нужно перенести изменения в ветвь по умолчанию. Для этого мы переключаемся на ветвь по умолчанию Mercurial -> Ветвь -> Переключение ветви, выбираем "default" и жмём кнопку.
5. Теперь нужно объединить ветвь по умолчанию с нашей разработкой: Группа -> Объединить -> Объединить изменения, выбираем нашу ветвь "feature-x" и жмём кнопку.
6. Если какие-то изменения из ветви по умолчанию мы ранее не объединили с ветвью "feature-x", то у нас будут правки, которые нам нужно зафиксировать.
После этого мы будем находиться в ветви по умолчанию, в которой будет функционал из
ветви "feature-x". Можно приступить к разработке следующего.
7. После нескольких итераций 1-6 мы обнаруживаем, что список ветвей, которые нам предлагаются для переключения и объединения в NetBeans нам теперь мешает.
Мы можем закрыть эти ветви полностью. Для этого переключаемся на ветвь "feature-x", затем нажимаем Mercurial -> Ветвь -> Закрыть ветвь. Нас попросят зафиксировать это изменение.
Можно с сообщение описать "Closed branch feature-x".
8. Ветвь закрыта, нужно переключится на ветвь по умолчанию (см. пункт 4).
9. Хоть ветвь "feature-x" теперь закрыта, но в ней появилась новая фиксация (та, что о закрытии) и NetBeans будет постоянно нам предлагать объединиться с ней. Мы так и сделаем:
Группа -> Объединить -> Объединить изменения, выбираем ветвь "feature-x" и жмём кнопку.
Но так как изменений в коде не было, NetBeans не может ничего предложить для фиксации, поэтому нам придется сделать одну любую мелкую правку, например, добавить пустую строку в файл, изменение которого не влияет на систему. Фиксируем это. При этом у нас фиксируется объединение закрытой ветви и NetBeans не предлагает нам её ни в меню переключения ветви, ни в меню объединения ветви. Что нам и нужно было.
Результат
Преимущество: у нас нет лишних ветвей в меню.Недостаток: у нас один лишний ничего не значащий комит (тот, что из ветви 9).
Где же особенности? Особенности - это пункт 2 и пункт 9.
Комментариев нет:
Отправить комментарий