Mercurial клон очистки, чтобы соответствовать вверх по течению - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть hg-клон репозитория, в который я внес несколько локальных изменений за несколько месяцев и отправил их моему клону в коде Google.К сожалению, как новичок, я внес целую кучу изменений в ветку по умолчанию.

Теперь я хотел бы убедиться, что мое текущее значение по умолчанию - ТОЧНО, как в восходящем направлении, и тогда я могу сделать правильное ветвление по умолчанию и работать только наветви ..

Однако как мне сделать эту очистку, хотя?

Для справки: мой клон http://code.google.com/r/mosabua-roboguice/source/browse

PS: я столкнулся с той же проблемой, связанной с git, и очистил ее: Очистите ветку master git и переместитекакой-нибудь коммит в новую ветку?

Ответы [ 4 ]

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

Во-первых, нет ничего плохого с коммитом в ветке по умолчанию. Обычно вы не хотите создавать отдельную именованную ветвь для каждой задачи в Mercurial, потому что именованные ветки вечны. Возможно, вы захотите взглянуть на функцию закладок для чего-то более близкого к веткам git («hg help bookmarks»). Так что если единственное, что не так с вашими существующими наборами изменений, это то, что они находятся в ветке по умолчанию, то в этом нет ничего плохого. Не беспокойся об этом.

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

Если вы не хотите тратить время / полосу пропускания на новый клон, вы можете использовать команду (100, опасно, не для начинающих) strip. Во-первых, вы должны включить расширение mq (Google или посмотреть руководство - я намеренно не объясняю это здесь, потому что это опасно ). Затем запустите

hg strip 'outgoing("http://upstream/path/to/repo")'

Обратите внимание, что я использую функцию revsets, добавленную в Mercurial 1.7 здесь. Если вы используете старую версию, простого способа сделать это не существует.

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

Лучший способ сделать это с двумя клонами.При работе с удаленным репо я не контролирую, я всегда держу локальный клон под названием «virgin», в который я не делаю изменений.Например:

hg clone -U https://code.google.com/r/mosabua-roboguice-clean/ mosabua-roboguice-clean-virgin
hg clone mosabua-roboguice-clean-virgin mosabua-roboguice-clean-working

Обратите внимание, что поскольку Mercurial использует жесткие ссылки для локальных клонов и поскольку этот первый клон был клоном с -U (без рабочего каталога (голое хранилище в терминах git)), это занимает нет дополнительного дискового пространства.

Работайте все, что вы хотите в работе robo-guice, и вставьте в себя деву robo-guice, чтобы увидеть, что происходит в восходящем потоке, и снова включите работу в rooguice, чтобы получить изменения в восходящем направлении..

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

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

Предисловие - все изменения в истории имеют смысл только для неопубликованных репо.После редактирования локальной истории вам придется нажать на репозиторий GoogleCode с нуля (удалить репо в GC, создать пустой, push) - в противном случае вы получите еще одну ГОЛОВУ в ветке по умолчанию

Manfred

Простой (но не короткий) способ - только по умолчанию + MQ

  1. , как упоминал Грег, установите MQ
  2. , переместите все ваши коммиты в MQ-патчи поверх кода восходящего потока
  3. оставляйте ваши изменения как патчи навсегда
  4. проверяйте, редактируйте, если необходимо, и реинтегрируйте патчи после каждого восходящего извлечения (таким образом, ваше собственное CG-репо без MQ-патчей станет идентичным восходящему)

Более сложный - MQ в середине + отдельные ветви

  1. выше
  2. выше
  3. создать именованную ветку, переключиться на нее
  4. «Готовые» патчи
  5. Потяните вверх по течению, объедините с изменениями вашей ветви ( с defaut до yourbranch)
  6. Передайте свои изменения только вyourbranch

Rebasing

  1. EnaРасширение ble rebase
  2. Создать именованную ветку (с изменениями в ней?TBT)
  3. Перенесите ваши ревизии новому предку, результаты теста
  4. См. 5-6 в главе "Более сложные"
0 голосов
/ 27 сентября 2011

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

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