У меня есть общая ветка в TFS (т.е. многие люди нажимают на нее).Я хочу запретить людям открывать запрос на извлечение из этой общей ветки в любую другую ветку.
У меня есть полный контроль над серверной стороной.Например, я могу добавить серверные перехватчики или установить серверные расширения.
Мотивация
Учитывая # 1
ВTFS мы связываем рабочие элементы с коммитами.Однако мы не знаем, как обеспечить привязку отдельных коммитов к рабочим элементам.Мы знаем, как применять его для запроса на извлечение - с помощью политики ветвления.
Итак, мы не собираемся требовать от разработчиков связывать рабочие элементы с коммитами, только с запросом на извлечение.
Учитывая # 2
В TFS, если есть ожидающий запрос извлечения из какой-либо ветви, тогда автоматически добавляются любые новые коммиты, переданные в эту ветку или извлеченные в нее (через другой запрос извлечения)на невыполненный запрос на извлечение.См. Запретить TFS добавлять новые коммиты в открытый запрос извлечения?
Результат
Предположим, X - это ветвь с невыполненными Запрос на вытягивание PR1 на ветвь Y с 3 коммитами - c1
, c2
и c3
.
X --[PR1=<c1,c2,c3>]--> Y
Если новый коммит c4
вставляется в X через другой запрос на извлечение (скажем, PR2)
--[PR2=<c4>]--> X
, затем c4
автоматически добавляется к PR1:
X --[PR1=<c1,c2,c3,c4>]--> Y
Это означает, что после завершения PR1 c4
будет связано с рабочим элементомPR1.Итак, что мы имеем?В ветви X эта фиксация связана с PR2, а в ветви Y - с PR1.Оба запроса извлечения связаны с различными рабочими элементами.
Какой беспорядок.
Возможные способы предотвращения
- Принудительное связывание рабочих элементов на уровне фиксации. Помимо того факта, что у нас нет удобного способа его применения (кроме серверной ловушки, которая заставляет каждый комментарий заканчиваться на
#XYZ
, см. Первый совет в https://blog.ehn.nu/2015/10/10-features-in-team-foundation-server-that-you-maybe-didnt-know-about/),, это не решает проблемуползучесть области запросов на извлечение. Это может не быть проблемой для запросов на извлечение, которые автоматически разрешаются при сборке, но для тех, которые требуют одобрения человеком. - Изменение поведения по умолчанию , т.е.Запрос на извлечение не будет принимать новые коммиты по умолчанию. И если коммиты в запросе на извлечение больше не находятся в исходной ветви, то запрос на извлечение автоматически отменяется. Увы, TFS не обеспечивает такой гибкости, и мы не знаем, как это сделать.можно сделать, если это вообще возможно.
- Запретить исходящие запросы извлечения из ветви. Мы знаем, что X является общей веткой, т. е. новые коммиты могутприбыть туда от разных участников наугад, что порождает проблему.Если бы не было способа открыть запрос на извлечение из X, у нас не было бы этой проблемы.Но тогда как вы сливаетесь из X в Y?Создайте частную ветвь вне X и объедините ее (конечно, с помощью запроса на извлечение).Но эта ветвь является частной, и поэтому нет никаких проблем.
Из всех предметов я чувствую, что с последним у нас больше всего повезло.