1

Я хочу управлять некоторыми профилями в виде файлов XML в репозиториях Mercurial.

Настройка, о которой я думаю: у каждого пользователя есть репозиторий с веткой, в которой он управляет своим собственным профилем, и несколько веток, где он может извлекать и объединять другие профили из этой ветки другого пользователя.

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

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

Так хочется как

me           friend       someone

profile ---> friends <--- profile
         \-> family

friends <--- profile

Это вообще возможно? Должен ли я использовать отдельные репо вместо этого? Есть ли лучшее решение?

1 ответ1

3

Я думаю, что хитрость здесь заключается в использовании именованных веток.

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

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

Например:

    --> B1 ---> B2 ---> B3
   /                \
A1 ---> A2 ---> A3 ---> A4 ---> A5 ---> A6
   \                        X
    --> C1 ---> C2 ---> C3 ---> C4

Пользователь ветви A хочет, чтобы изменения B были добавлены в ревизиях B1 и B2, поэтому объединяет B2 в A3, переводя его в формат A4. Пользователь B не хочет изменений A, поэтому не объединяется в A3 или A4 и просто создает новый B3.

Пользователь C хочет все изменения от A4, поэтому объединяет его с C3, чтобы создать C4.

Однако пользователь А хочет, чтобы все, что делал С, кроме С1, поэтому А сливает С3 в А4, создавая А5, а затем использует откат для отмены изменений в С1, создавая А6. С тех пор всякий раз, когда ветвь C объединяется с ветвью A, она пропускает изменения в C1.

Пользователь C теперь должен быть осторожным. Если A6 или один из его потомков будет объединен обратно с C4, то и возврат C1 будет также объединен.

Надеюсь это поможет,

Изменить: Для получения дополнительной информации о ветвлении и слиянии Mercurial, вы могли бы сделать хуже, чем проверить запись в блоге Стива Лоша.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .