Это ситуация, когда я должен "hg push -f"? - PullRequest
1 голос
/ 10 мая 2010

У меня есть две машины, A и B, которые обе обращаются к внешнему репозиторию hg.

Я провел некоторую разработку для A, не был готов передать внешние наборы изменений, и мне нужно было переключать машины, поэтому я передал наборы изменений в B, используя hg serve. Изменения продолжались на B, были зафиксированы и затем отправлены во внешнее хранилище.

Затем я вытащил на A и обновил до default / tip. Это оставило локальные наборы изменений, которые ранее были перенесены в B, как ветвь, но из-за того, как я их передал, изменения в локальных наборах изменений уже по умолчанию / tip.

Теперь я продолжал вносить изменения и фиксировать локально на A, но когда я пытаюсь нажать hg, просит меня объединить или выполнить push -f вместо этого. Я знаю, что push -f почти никогда не рекомендуется. Эта ситуация близка к той, где я должен использовать rebase, однако наборы изменений, которые были бы «перебазированы», мне на самом деле не нужны ни локально, ни во внешнем репозитории, поскольку они уже эффективно используются по умолчанию / tip через push to B.

Теперь я знаю, что могу слиться с последним локальным набором изменений и просто отменить изменения, но тогда мне все равно придется совершить слияние, которое возвращает меня на территорию перебазирования.

Это тот случай, когда я мог бы сделать hg push -f?

Кроме того, зачем при нажатии кнопки A создавать удаленные заголовки, если я обновил значения по умолчанию / tip до того, как продолжил фиксировать наборы изменений?

1 Ответ

2 голосов
/ 11 мая 2010

Я бы сделал резервную копию своих репозиториев A & B, а затем попробовал бы это:

rem Machine A
rem ---------
hg merge
hg commit -m"merge"
hg push

rem Machine B
rem ---------
hg pull

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

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

hg merge --preview

, чтобы получить лучшее представление о том, что он собирается делать.

Если вы действительно хотите неразветвленную историю, то вы можете создать чистый клон внешнего хранилища [если он не слишком большой] и применить свои изменения из А. как патчи.

...