Обеспечение слияния ветвей происходит в одном направлении - PullRequest
11 голосов
/ 11 мая 2011

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

Ответы [ 3 ]

3 голосов
/ 12 мая 2011

Независимо от того, слились ли вы ver5 с версией 6 или версией 6 с версией 5, у вас все равно останется ребенок от версии 5, в котором есть материал от вершины 6

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

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

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

или

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

TL; DR: Это, вероятно, больше проблем, чем стоит - придерживайтеськ позору.

2 голосов
/ 13 ноября 2013

Это должно сделать это. Он использует revset запрос , чтобы найти любые слияния в 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 не косвенно слился с моей веткой релиза, т.е. по умолчанию -> feature -> релиз.

2 голосов
/ 12 ноября 2013

Вместо того, чтобы публиковать дважды, поможет ли мой ответ " Mercurial: разрешить слияние из ветки релиза с веткой по умолчанию, но не наоборот "? https://stackoverflow.com/a/19926324/1025457

...