Самый простой способ разбить набор изменений в Mercurial - PullRequest
27 голосов
/ 31 марта 2011

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

Одна из первых вещей, которые я заметил, - это то, что у Mercurial нет индекса, как у git. Я склонен вносить больше изменений, чем иногда, и после редактирования файла я буду использовать git add -p, чтобы разделить патч на отдельные коммиты. Если изменения находятся в разных файлах, я, вероятно, мог бы использовать MQ, но в остальном похоже, что мне нужно сначала отменить изменения.

Может ли быть расширение для Mercurial, которое обеспечивает функциональность, подобную индексам?

Ответы [ 3 ]

39 голосов
/ 12 декабря 2012

Существует два способа разделения набора изменений, в зависимости от того, зафиксировали ли вы изменения, которые вы хотите разделить, или нет:

Выборочная фиксация изменений из вашего рабочего каталога (если у вас нетзафиксировал ваши изменения):

  • Использовать hg record.(Это похоже на использование git commit --patch.)

Чтобы разделить существующий набор изменений (если вы уже зафиксировали свои изменения):

  1. Использовать hg histedit и выберите параметр edit для набора изменений, который вы хотите редактировать.(Это похоже на использование git rebase -i.)

  2. Используйте hg record для выборочной фиксации ваших изменений как отдельных наборов изменений.

  3. Использование hg histedit --continue когда вы закончите.Оставшиеся незафиксированные изменения будут включены в окончательный набор изменений.

Как уже упоминалось, вы можете использовать hg crecord вместо hg record.

22 голосов
/ 31 марта 2011

Вы правы, что нет индекса в стиле git.Вы можете использовать hg record (распространяется с Mercurial) или hg crecord.И то, и другое позволяет вам выбирать для каждого файла или для каждого фрагмента при фиксации.crecord более сложный, но требует проклятий.

ОБНОВЛЕНИЕ (2016-11-19)

Функциональность расширения crecord теперь доступна в ядре Mercurial,Также использование лучше интегрировано.Предпочтительным способом фиксации выбранных фрагментов является

$ hg commit --interactive

По умолчанию это ведет себя как старая команда record .Чтобы получить интерфейс на основе curses, как в старой команде crecord , установите его в HGRC :

[ui]
interface = curses
1 голос
/ 01 апреля 2011

Вам может быть интересно прочитать эту статью, в которой объясняется, как другое расширение ртути, очереди исправлений, похоже на индекс git для стероидов:

http://stevelosh.com/blog/2010/08/a-git-users-guide-to-mercurial-queues/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...