Рефакторинг при реализации функции с помощью Mercurial
Мне нужен совет по процессу разработки с Mercurial при работе с устаревшим кодом.
Когда я разрабатываю новую функцию для унаследованного проекта, мне часто приходится реорганизовывать часть существующего кода во время реализации функции. Я имею в виду, я не ожидал рефакторинга, и мне нужно сделать это, прежде чем перейти к реализации функции, так как я буду использовать рефакторинг кода.
Поскольку я думаю, что рефакторинг полезен, даже если функция не реализована, я хочу, чтобы он был сам по себе набором изменений, а не частью набора изменений "функции". Кроме того, поскольку я работаю над устаревшим кодом, он не является хорошо тестируемым модулем, поэтому мне нужно проверить (вручную) только рефакторинг без кода разрабатываемой функции.
Итак, мой текущий процесс при работе с устаревшим кодом выглядит следующим образом:
- работать над функцией
- Ой, мне нужно что-то реорганизовать, так
- извлечь патч из текущего состояния моей рабочей копии
- отменить изменения
- проведите рефакторинг и протестируйте!
- зафиксировать изменение в репозитории Mercurial
- повторно импортируйте патч и устраните конфликты вручную
- вернитесь к 1.
Есть ли что-то, что я мог бы улучшить в моем процессе с Mercurial? Есть ли способ временно сохранить рабочую копию и получить ртутную информацию о конфликтах при возврате сохраненных изменений в мою рабочую копию?
Если нет, то git рассматривает этот вариант использования больше, чем mercurial?
4 ответа
shelve
расширение делает шаги 3, 4 и 7 для вас. Подробности можно найти здесь.
Если вы используете TortoiseHg, он встроен в рабочую среду в меню репозитория.
Мои небольшие отклонения
- Я не могу представить себе серьезного развития без MQ, поэтому
3 - сохранить текущую работу как MQ-патч
4 - qpop it
...
6 - зафиксировать в отдельной ветке
7 - qpush поверх ветки рефакторинга, разрешение конфликтов, qpop
7a - объединить ветвь рефакторинга в Feature-ветку
7b - qpush в feature-branch, разрешать конфликты
7c - qfinish
Вместо того, чтобы извлечь патч, я бы зафиксировал код:
- Работа над функцией
- Узнайте, что вам нужно что-то реорганизовать
- Передайте свою работу в прогресс
- Обновите ревизию перед вашей фиксацией
- Сделайте рефакторинг, протестируйте
- Зафиксируйте переработанный код
- Слияние с ранее совершенной работой в процессе
- Продолжить, промыть, повторить
Бонусные баллы, если работа, которую вы выполняете на шаге 3, является функциональной:), потому что неработающий код является плохой отправной точкой для возобновления работы после рефакторинга.
Когда я нахожусь в этой ситуации, я делаю все одним большим куском, и когда я готов к фиксации, я разделяю патч либо используя qrecord
или вручную (используя Emacs).