2010-09-04 3 views
0

При работе с контролем версий история обычно выглядит как плоская цепочка изменений. Существует некоторый рудиментарный механизм организации иерархии (я имею в виду ветви), но она не кажется достаточно гибкой. Каковы распространенные практики (агенты контроля версий) для организации пересмотров в многоуровневых иерархиях и что такое специальные средства контроля версий?Как организовать ревизии в иерархиях?

Я приведу тривиальный пример реального мира из моей практики, который приведет меня к этому вопросу.

Предположим, я хочу реорганизовать метод/класс. Я создаю билет и называю его «Метод рефакторирования ClassName.method_name()». Изучив код method_name(), я делю процесс рефакторинга на подзадачи. Для простоты рассмотрим, что мне нужно переименовать две переменные с разными значениями в коде, поэтому мне нужно сделать это двумя разными атомарными шагами. Я переименовываю переменную, сохраняю изменения и фиксирую с сообщением «переименовал переменную foo в ClassName.method_name()» (потому что совершение раннего и фиксации часто является хорошим). Повторяю для второй переменной: «переименована переменная bar в ClassName.method_name()».

Теперь у меня есть один билет в системе отслеживания проблем, названный "метод Refactor ClassName.method_name()" и две версии в системе управления версиями:

  • "переименовали переменную Foo в ClassName.method_name()"
  • «переименовано бар переменной в ClassName.method_name()»

Где связь между вопросом и этими двумя модификациями? Я потерялся!

Моя цель состоит в том, чтобы иметь логическую иерархию, как это:

  • "метод Refactor ClassName.method_name()"
    • "переименованный переменную Foo в ClassName.method_name()"
    • " переименованы переменная бар в ClassName.method_name()»

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

Это будет иметь смысл, я поклонник использования outliners и организации данных в иерархии с использованием деревьев.

Как люди делают это в управлении версиями? Существует множество инструментов управления версиями, каждый из которых имеет свои тонкости, некоторые из них позволяют включать трекеры сторонних разработчиков ошибок в репозиторий, некоторые даже имеют интегрированное отслеживание ошибок (например, fossil), поэтому, пожалуйста, подробно остановитесь на рабочих процессах для определенных инструментов управления версиями.

ответ

0

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

  • Создайте ветку со своего ствола под названием «метод рефакторинга».
  • Создайте ветку из ветви «refactor method» с именем «rename foo».
  • Выполняйте всю свою работу для переименования foo, перейдя в ветвь «переименовать foo», когда вы идете вперед.
  • Объединить «переименовать foo» обратно в «метод рефакторинга».
  • Создайте ветку из ветви «refactor method» с именем «rename bar».
  • Выполняйте всю свою работу для переименования бара, вступая в ветку «переименовать бар».
  • Объединить «переименовать бар» обратно в «метод рефакторинга».
  • Объединить «метод рефакторинга» обратно в ваш багажник.

Отображения магистральной ветви с графическим инструментом будет показывать только «метод рефакторинга» со знаком плюс или что-то, чтобы развернуть его, вроде как это:

from softwarewhys.wordpress.com . При щелчке знака «плюс» вы увидите «переименовать foo» и «переименовать панель». Повторное нажатие откроет все отдельные шаги. Кроме того, работа может происходить параллельно, люди проверяют в другом порядке, чем они проверяли, и вы все равно получите иерархическую историю. В моем графике вы можете видеть, что Арнольд проверял свое исправление ошибки после того, как Эми разветвлялась для ее изменения, но история все еще работает.

+0

Спасибо, это выглядит очень гладко. Я предвижу, что этот рабочий процесс будет работать с bzr, mercurial, git и окаменелостью, по крайней мере. Но что делать с инструментами управления версиями, которые не поддерживают явное ветвление? Я имею в виду дарков. –