Чистая история изменений в Mercurial - PullRequest
9 голосов
/ 14 сентября 2011

Я новичок в Mercurial и все еще пытаюсь установить рабочий процесс.

Я клонирую удаленный репозиторий.Затем я делаю изменения и фиксирую свой локальный репозиторий.Я хотел бы выдвинуть чистую историю изменений.Я не хочу выдвигать некоторые ревизии, которые могут только испортить удаленный репозиторий (например, опечатка переименование методов, добавление javadoc, удаление пробелов и т. Д.).Возможно ли это?

Спасибо!

Ответы [ 4 ]

8 голосов
/ 14 сентября 2011

Действительно, есть случаи, когда имеет смысл сокращать / удалять / полировать наборы изменений или разделять частные / текущие и публичные / готовые изменения.Вот несколько советов, как справиться с этим с помощью Mercurial:

  1. Если вы сделали серию небольших коммитов (что хорошо), но вы предпочитаете публиковать их как один набор изменений (которыйимеет смысл, если вы зафиксировали (возможно противоречащие - наборы изменений снимков), используйте расширение :

    $ hg collapse -r <first-ref>:<last-ref> # both revs including
    
  2. Если у вас есть только изменениявы хотите сохранить конфиденциальность, в то время как другие вы хотите опубликовать, либо (а) используйте ртутные очереди для ваших личных изменений, либо (б) зафиксируйте ваши личные изменения только в собственной ветви ( названный, добавленный в закладки или клонированный ) и регулярно объединяйте его с публичной веткой.Последнее требует от вас частого переключения между ветками, если вы чередуете частные и публичные изменения.


ОБНОВЛЕНИЕ

Для иллюстрации варианта2.b, рассмотрите график изменения:

0--1--4--5---8--9   <= public/stable branch
    \     \
     2--3--6--7     <= private/dev branch

Это означает, что вы внесли изменения 2 и 3 в ветку dev .Затем вы поработали над веткой stable (ревизии 4 и 5).Эти изменения также имеют смысл в dev , поэтому вы объединяете их в dev (ревизия 6).Наконец, вы вносите еще одно экспериментальное изменение в dev (ревизия 7) и некоторые готовые к публикации улучшения в stable (ревизии 8 и 9).Теперь вы можете опубликовать (то есть отправить в удаленный репозиторий) изменения, сделанные в stable , запустив

$ hg push -r 9     # or `-r stable` if the branch is named or bookmarked as such

Все частные изменения останутся локальными!

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

2 голосов
/ 14 сентября 2011

Это больше вопрос о системах контроля версий в целом, чем о Mercurial. Лично я бы подтолкнул все, что вы предлагаете, как бы противоречит целям систем контроля версий.

Однако, если вы хотите узнать больше о рабочих процессах hg, попробуйте взглянуть на это руководство или на wiki .

Вас также может заинтересовать команда rollback , которая позволяет вам зафиксировать последний коммит.

edit : я бы выбрал вариант, состоящий в том, чтобы сохранить две ветви: одну, идентичную удаленному репозиторию, где вы вносите только «официальные» изменения, а другую, где вы объединяете новые официальные коммиты и делаете дополнительные частные совершает.

1 голос
/ 14 сентября 2011

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

Если нет, вы можете попробовать использовать Очередь исправлений для удаления ненужных фиксаций:

  • Импортируйте ваши изменения один за другим в MQ и отмените патчи
  • Удалите патчи, которые соответствуют изменениям, которые вам не нужны
  • повторно примените оставшиеся патчи

Это будет работать для небольших коммитов.Пожалуйста, если вы попробуете это, сделайте это на клоне вашего локального репо, чтобы избежать потерь.

Кроме того, постарайтесь не изменять уже «разделяемую» (отправленную) историю.

0 голосов
/ 26 сентября 2011

Histedit также может быть полезным и более простым (чем MQ) решением для редактирования истории

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