Подтвердить что ты не робот

Обеспечение слияния между ветвями происходит в одном направлении

Сегодня утром я обнаружил, что мой сотрудник слил неправильный путь между двумя ветвями в mercurial - у нас есть ветка ver5 и ver6 с дополнительными файлами в ver6. Есть ли способ (вероятно, серверный крючок), чтобы обеспечить, чтобы дети любого ver5 node были из ver5?

4b9b3361

Ответ 1

Вместо того, чтобы публиковать дважды, ответ на " Mercurial: разрешить слияние с ветвью релиза по умолчанию, но не наоборот? fooobar.com/questions/472000/...

Ответ 2

Если у вас есть ver5, слитый в ver6 или ver6, объединенный в ver5, вы все равно заканчиваете с ребёнком ver5, у которого есть материал из ver6 в нем.

Если, однако, вы хотите избежать набора изменений, чье имя ветки ver5 имеет предков, которые являются ver6, вы можете сделать это довольно легко с помощью hook. То, где вы положили этот крюк, - сложная часть. Если вы сделаете его крюком pretxnchangegroup, вы можете запретить людям отказываться от оскорбительного слияния в серверном репо, но они уже совершили его, а может быть, еще несколько изменений поверх него, и у них будет сложный время выяснить, что делать, чтобы исправить это. Если вы можете управлять своими локальными настройками, вы можете поместить крюк pretxncommit, который не позволяет им выполнить слияние, но вы не можете заставить их запускать этот крюк, используя только инструменты Mercurial.

Фактический крючок, какой бы тип вы его ни использовали, может использовать любую из этих стратегий:

  • проверьте, является ли branchname ver5, и если это так, убедитесь, что какой-либо конкретный файл/содержимое из ver6 не является presnet

или

  • проверьте, является ли branchname ver6, и если да, убедитесь, что ни p1, ни p2 не имеют branchname ver5

TL; DR: Вероятно, это больше проблем, чем стоит - придерживайтесь стыда.

Ответ 3

Это должно сделать это. Он использует вопрос об отсрочке, чтобы найти какие-либо слияния в ver5 от ver6.

hg log -r 'children(p2(::ver5 and ::ver6 and merge()) and branch(ver6)) and branch(ver5)'
  • ::ver5 and ::ver6 and merge() находит все слияния, которые являются предками как ветвей ver5, так и ver6
  • p2(...) and branch(ver6) захватывает второй родительский (входящий набор изменений), который находится в ветки ver6.
  • children(...) and branch(ver5) затем захватывает фактический набор изменений слияния, который находится на ветке ver5.

Мне недавно нужно было выяснить это сам, но также необходимо было убедиться, что default не был косвенно объединен с моей ветвью релиза, т.е. функция по умолчанию → - > релиз.