Подтвердить что ты не робот

Выполнение без частичного совершения "меркуриального пути"

Магазин Subversion рассматривает возможность перехода на Mercurial, пытаясь заранее выяснить, какие будут жалобы разработчиков. Там один довольно распространенный случай использования, который я не вижу, как обращаться.

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

Теперь что?

Я просмотрел "изменения меркуриальной вишни для фиксации и "лучшие практики в mercurial: branch vs. клонирование и частичные слияния? ", и все предложения, похоже, являются расширениями различной сложности: от Record и Shelve до Queues.

Тот факт, что, по-видимому, не существует какой-либо основной функциональности, вызывает у меня подозрение, что в некотором смысле этот рабочий стиль - это Doing It Wrong. Как выглядят похожие на Mercurial решения для этого случая использования?


Отредактировано для добавления: git, напротив, похоже, предназначено для этого рабочего процесса: git add файлы исправлений, не git add ничего другого (или git reset HEAD что угодно уже добавлены), git commit.

4b9b3361

Ответ 1

Вот как бы я справился с этим случаем:

  • имеют ветвь dev
  • имеют ветки функций
  • имеют личную ветку
  • имеют устойчивую ветвь.

В вашем сценарии я часто бывал в своем ветке с ветки функции.

Когда запрос вошел, я бы hg up -r XYZ, где XYZ - это номер оборота, который они запускают, а затем отделяет от него новую ветвь функции (или up branchname, что угодно).

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

Вернитесь к моей работе и слейте верхнюю ветвь фиксации функции node, тем самым объединив два потока усилий.

Ответ 2

Множество полезных функций для Mercurial предоставляется в виде расширений - не бойтесь их использовать.

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

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

Ответ 3

Вы клонируете репозиторий (т.е. создадите ветвь с исправлением ошибок в терминах SVN) и выполните исправление оттуда.

Альтернативно, если это действительно быстрое решение, вы можете использовать параметр -I для фиксации для явной проверки отдельных файлов.

Ответ 4

Как и любой DVCS, ветвление - ваш друг. Разделение репозитория несколькими способами - это хлеб и масло этой системы. Здесь git model вы можете подумать о том, чтобы принять это, что хорошо работает с Mercurial.

Ответ 5

В дополнение к что сказал Санта о ветвлении, являющемся вашим другом...

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

Ответ 6

Не используйте Mercurial без использования Mq Extension (он поставляется с предустановленной установкой по умолчанию). В дополнение к решению вашей конкретной проблемы, он решает множество других общих проблем и действительно должен быть стандартным способом работы (особенно если вы используете среду IDE, которая не интегрируется напрямую с Hg, что делает переключение ветвей на лету трудный способ работать).