2016-02-14 2 views
0

Мы используем меркурийный/черепаховый с центральным хранилищем, размещенным в печи.Меркурийные слияния разных файлов

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

  1. Bob изменяет файл a.txt, фиксирует и толкает его в печь.
  2. Joe изменяет файл b.txt и фиксируется.
  3. Joe пытается нажать на печь, но получает следующие ошибки: пульт имеет головки на ветке «по умолчанию», которые не известны локально: 503dc02bd36c abort: push создает новую удаленную головку dba053a5be68!
  4. Это, очевидно, связано с изменениями Боба, которые нужно перенести из печи сначала. Итак, Джо вытащил изменения из печи и добился успеха
  5. Джо пытается нажать на печь, но получает следующие ошибки: abort: push создает новую удаленную головку dba053a5be68!
  6. Джо сливает его фиксаций с местными и успешно
  7. Джо в настоящее время пытается подтолкнуть к печи и успешно

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

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

+0

сценарий вы описываете очень ясно, но я не уверен, что спрашивают здесь. Вы, возможно, спрашиваете, будет ли хорошая идея для мерседесов вести себя так, как вы предлагаете?Вы заинтересованы в том, как сделать это по умолчанию для вашего репозитория? – alexis

ответ

1

Так работает Mercurial.

Если у Joe нет изменений, не было бы необходимости в слиянии или слиянии, и он мог бы просто использовать hg update tip или hg pull. Однако, поскольку у Joe были изменения при создании запроса на pull, хотя они не были в одном файле, требуется слияние.

Эту информацию можно найти в руководстве Mercurial по: https://www.mercurial-scm.org/guide

Если вы не делали каких-либо изменений в проекте, в то время как вы работали на Feature1, вы можете просто обновить до кончика (Hg Кончик обновление) , но более вероятно, что вы внесете некоторые изменения в изменениях. В этом случае пришло время для слияния.

Merge feature1 в код проекта

$ рт.ст. сливаться

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

$ рт.ст. совершают

+0

На самом деле это не только то, как работает mercurial, так как большинство (все?) Распределенных VCS работают, когда у вас более одного коммита с одним и тем же родителем. Альтернатива слиянию одного из людей может переустановить его набор изменений на другой фиксатор, таким образом линеаризуя историю снова, до того, чтобы направить его изменения также в центральный репозиторий. – planetmaker

+0

Rebasing будет хорошим решением в этом случае, но сначала его необходимо включить в Mercurial: https://www.mercurial-scm.org/wiki/RebaseExtension#Configuration –

Смежные вопросы