Mercurial и кодовые обзоры; хороший рабочий процесс?
Я в небольшой распределенной команде, использующей Mercurial для центрального хранилища. Каждый из нас клонирует его через ssh на наши собственные Linux-боксы. Нашей целью является проверка работы друг друга, прежде чем отправлять изменения в центральное хранилище, чтобы помочь поддерживать центральный кончик в чистоте. Что такое хороший способ поделиться кодом между разработчиками на разных боксах Linux? Я новичок в Mercurial. Варианты, которые я могу придумать (через чтение, а не опыт):
1: Автор фиксирует все локальные изменения и обновляет рабочий клон с помощью центрального совета. Автор использует пакет hg, если есть способ указать, какие локальные обороты следует включить в пакет. (эксперимент показал, что "пакет" захватывает только незафиксированные изменения, даже если есть предыдущие локальные коммиты, о которых центральный не знает) Автор передает пакетный файл рецензенту. Рецензент создает новый чистый клон из центрального наконечника и импортирует пакет в этот клон. или же,
2: После того, как автор и рецензент извлекают данные из центрального совета, автор использует патч, а рецензент импортирует патч. или же,
3: Автор выдвигает рецензента или рецензента извлекает информацию от автора (но как именно? Что я читаю, это только о том, как перетаскивать и извлекать данные из / в исходный обслуживаемый репозиторий и / или в один и тот же ящик, а не между разными ящиками Linux).
4: Забудьте о просмотре кода до нажатия на центральную часть; продолжайте и нажимайте, используя теги, чтобы определить, что было проверено или нет, и используйте Hudson (уже работает), чтобы пометить последнюю безопасную сборку, чтобы члены команды могли знать, из какого из них извлечь.
Если ваша команда использует Mercurial и проверяет код, как вы можете заставить рецензента увидеть ваши изменения?
3 ответа
Большинство из них возможно, некоторые более утомительны, чем другие.
- Вы можете использовать комплект, указав кончик центрального репо в качестве
--base
:hg bundle --base 4a3b2c1d review.bundle
- Можно также просто использовать расслоение. Таким образом, данные набора изменений также включены.
- Вы можете выдвинуть (и вытащить) любой (любой) репозиторий, у которого есть общие предки. Если вы хотите вытащить от одного из ваших коллег, им просто нужно запустить
hg serve
на свою машину, и вы сможете тянуть. - Это также работает, но вам придется поддерживать несколько головок и быть осторожным при слиянии. Если вы этого не сделаете, то может быть легко создать стабильное изменение поверх нерецензированного набора изменений, что затруднит его отмену, если позже вам потребуется исправить это не просмотренное изменение.
Из представленных вами вариантов, #1 и #3, вероятно, самые простые, в зависимости от того, можете ли вы добраться до ящиков друг друга.
На заметку по этому вопросу: Этот вопрос задал мне и моему коллеге разработку Kiln, нашего (Fog Creek's) Mercurial хостинга и инструмента проверки кода. Наш план и первоначальный прототип будут содержать несколько репозиториев, один "центральный" репозиторий и кучу "обзорных" репозиториев. Процесс рецензирования может быть начат с клонирования центрального репо в репо рецензирования на сервере, а затем запуска полной разницы репо между ними с простым веб-интерфейсом для получения и просмотра различий.
Мы немного развили этот рабочий процесс, но общая идея, заключающаяся в том, чтобы иметь репозиторий с ответвлениями для отправки не просмотренных изменений и интерфейс для их просмотра до того, как вы отправите их в центральный репозиторий, остается прежней. Я не хочу рекламировать здесь, но я рекомендую попробовать.
Половина ответа на этот вопрос - использование ReviewBoard с расширением Mercurial. Это позволяет выдвинуть определенные ревизии для просмотра, выполнив следующую команду
hg пост-просмотр
Я добавлю 5-й вариант - всю работу по разработке над именованными ветками, желательно по одной на задачу. Разрешить что-либо связать с веткой с именем "development", независимо от того, находится она в рабочем состоянии или нет.
Нажмите на центральное хранилище, попросите рецензента вытащить ветку. Выполните обзор по ветке.
Когда обзор пройден, объедините работу по разработке с соответствующей веткой функций.
Этот рабочий процесс, который (на мой взгляд) на удивление непопулярен, имеет много преимуществ:
Вся работа становится обязательной - вам не нужно ждать пересмотра, чтобы выполнить ее.
Вы не будете строить неправильную версию. Вы только когда-либо строите из функциональной ветви.
Выполняемая работа не мешает другим разработчикам.
В ветке разработки вы можете либо просмотреть последние изменения (например, наборы изменений, относящиеся к комментариям к обзору), сравнить с точкой ветвления или сравнить с последней веткой функций - все они могут дать полезную информацию.