TortoiseHG: не может частично фиксировать слияние

Я пытался объединить две головы в Подвижном. После слияния я не фиксировал и сделал еще некоторые изменения. Затем я попытался фиксировать и получил следующее сообщение:

аварийное прекращение работы: не может частично фиксировать слияние (не указывайте файлы или шаблоны),

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

Что я должен сделать для окончания фиксации успешно?

11
задан Bleeding Fingers 21 October 2014 в 22:14
поделиться

2 ответа

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

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

Таким образом, чтобы частично ответить на ваш вопрос, правильнее было бы зафиксировать слияние без ваших дополнительных изменений, а затем применить и зафиксировать следующую волну изменений. Если вы используете TortoiseHG для выполнения слияния, он фактически предложит вам зафиксировать слияние перед выходом из графического интерфейса, потому что это предполагаемый рабочий процесс HG.

При этом я внес некоторые изменения в именованную ветку (например, новую голову), снова слил ее с веткой по умолчанию, вышел из графического интерфейса TortoiseHG без фиксации, внес еще несколько изменений и затем без проблем зафиксировал. Я задам несколько уточняющих вопросов под вашим исходным запросом.

3
ответ дан 3 December 2019 в 04:30
поделиться

Mercurial / TortoiseHg правильно говорит вам, что вы не должны частично фиксировать слияние. Частичная означает, что вы не фиксируете все файлы сразу.

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

Представим, что вы начали с наборов изменений A и B и хотите их объединить. Это создает такой график:

... --- [A]
           \
            [M]
           /
... --- [B]

Представьте, что мы добавили строку A! в a.txt в наборе изменений A и что мы добавили B! в b.txt в наборе изменений B . Всего два независимых изменения, которые не конфликтуют. Если Mercurial позволил вам выполнить частичную фиксацию, вы могли бы сделать это:

hg merge
hg commit -m 'Added A!' a.txt  # creates M
hg commit -m 'Added B!' b.txt  # creates M'

, и результат будет следующим:

... --- [A]
           \
            [M] --- [M']
           /
... --- [B]

Если вы посмотрите на b.txt по пути B , M , M ', то вы увидите, что строка с B! был введен в B , удален в M и повторно введен в M '!

Это не то, что вы хотите от набора изменений слияния: частичное слияние отбрасывает изменения из одной ветки только для того, чтобы представить их снова в последующей фиксации. Mercurial доверяет вам, когда вы создаете M : он действительно считает, что M содержит правильное сочетание A и B . В частности, если B! Строка удалена в M , затем она останется удаленной, когда вы объедините M с другими наборами изменений.

Итак, Mercurial пытается защитить вас от создания плохой истории, не допуская частичных слияний.

13
ответ дан 3 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: