2016-04-28 4 views
0

У нас есть большой проект со многими командами, работающими на разных модулях, и чтобы «мастер» всегда работал, мы используем несколько ветвей группы, объединенных в основную ветвь в конце каждого спринт, если все в порядке. У каждой команды есть свои филиалы функций, которые идут в отдел команды, когда они закончены.Gerrit: настроить ссылки для нескольких ветвей Git того же уровня

Теперь я пытаюсь перенести наш проект на Gerrit, чтобы запретить случайные прямые нажатия в «master», но сталкиваются с несколькими проблемами. Я много использовал Git, но никогда раньше не использовал Gerrit, поэтому я немного смущен его «магическими пространствами имен». Я искал официальную документацию, но у меня много темных пятен.

Что я хочу сделать, так это позволить каждому разработчику иметь право создавать новые ссылки и нажимать (включая силу) на ссылки refs/heads/* (ветви функций и команд), но не иметь возможности напрямую входить в refs/главы/мастер. Все фиксации мастеру должны пройти проверку Gerrit и цикл сборки инструмента CI, поэтому его следует нажать на ссылку refs/for/master.

Я обнаружил, что у меня нет возможности разрешить ссылку для «refs/heads/*» и отрицания для «refs/heads/master». Поскольку их пути сталкиваются, только один из них работает одновременно (более общий). Поэтому я не могу отрицать толкает «хозяина» таким образом.

Вот часть моего project.config:

[access "refs/for/master"] 
    push = group Developers 
[access "refs/heads/*"] 
    push = group Developers 
[access "refs/heads/master"] 
    push = deny group Developers 

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

ответ

0

Это может быть немного запутанным, когда вы устанавливаете ссылки на проект Gerrit. Фактически «refs/heads/*» позволяет нажимать на ветви для всех добавленных групп пользователей, поэтому конфигурация из выше всего не будет работать для описанной цели.

Это, как я на самом деле решается вопрос:

[access "refs/for/master"] 
    push = group Developers 
[access "^refs/heads/OR-.*"] 
    create = group Developers 
    push = group Developers 
    pushMerge = group Developers 
[access "refs/heads/master"] 
    push = deny group Developers 

Поскольку я обнаружил, что правила доступа для «ссылки/главы/*» отменяет любое запрещающее правило для этого пространства имен, я использовал регулярное выражение для наших художественных отраслей, которая начинается с префиксом «OR-» и в то же время отрицается, толкает в «ведущую» ветвь. Поскольку у нас есть несколько команд с их филиалами с именем master, легко добавить правило запрета доступа для них тоже. Просто используйте «^ refs/heads/master -. *» Regexp и откажитесь от всех нажатий.

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

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