Способ ограничить доступ к ветке Git? - PullRequest
66 голосов
/ 09 января 2012

В моем git-репозитории четыре ветки, которыми управляет GitHub:

  • Производство
  • Балетмейстер
  • Мастер
  • [имя человека] -развитие

Есть ли способ ограничить доступ на запись только к одной ветви ([имя пользователя] -развитие)? Как бы я это сделал?

Для справки, похожий вопрос: Как написать git hook, чтобы ограничить запись веткой? .

Ответы [ 9 ]

47 голосов
/ 09 января 2012

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

При использовании вашего собственного сервера Git должна быть возможность использовать хуки, чтобы пользователи не могли переходить в неправильные ветви.

15 голосов
/ 07 октября 2016

GitHub добавил функциональность к ограничить, какие пользователи могут нажать на ветку для организаций ранее в этом году .

restrict branch

11 голосов
/ 03 сентября 2015

Примечание: Защищенные ветви и требуемые проверки статуса (3 сентября 2015 г.) не будут точно разрешать одну ветку ("[имя пользователя] -развитие"), но этополучение клона.

Ветвь будет защищена:

  • от принудительного нажатия
  • от удаления
  • от объединенных изменений до тех пор, пока не пройдут необходимые проверки статуса

https://cloud.githubusercontent.com/assets/25792/9596474/27db3ce6-502a-11e5-9b19-5b47a8addc65.png

10 голосов
/ 08 января 2015

Возможно, вы захотите проверить GitLab и его функцию "защищенной ветки".Я думаю, что это именно то, что вы ищете.См. Защита вашего кода .

7 голосов
/ 12 декабря 2013

Esko предложил отличное решение, подходящее для проектов с открытым исходным кодом.Однако для этого требуется, чтобы у каждого члена команды соавторов была платная учетная запись на GitHub, что не всегда верно.

VonC указало, что существует другое решение, которое включает только одну платную учетную запись GitHub.И я собираюсь предоставить некоторый учебник по реализации решения VonC.

Давайте предположим, что у нас есть два частных хранилища: test-test и test-production.Первый репо предназначен для разработки, и каждый член команды имеет к нему доступ.Второй репозиторий предназначен для автоматического развертывания кода, поэтому к нему применяются жесткие ограничения доступа.

Настройка для разработчиков довольно проста и проста: git clone https://github.com/<username>/test-test, сделайте свою работу и отодвиньте ее.

Настройка для соавторов немного сложнее:

  1. Извлечение веток из репозитория разработки git clone https://github.com/<username>/test-test

  2. Добавление удаленного репозитория git remote add production-repo https://github.com/<username>/test-production.git

  3. Извлечение данных из нового репо git fetch production-repo

  4. Создание новой локальной ветки для производственного кода и переключение на нее git checkout -b local-production

  5. Скажите git связать локальные и удаленные филиалы git branch -u production-repo/production

  6. Загрузить содержимое удаленной производственной ветви в локальную git pull

  7. Разберитесь с возможными конфликтами и все!

Теперь все, что выталкивается из ветви local-production, попадет в репо test-production и другие ветви.будет подтолкнут к репо test-test.

Хорошо, это круто, бно как насчет более детального доступа ([имя человека])? - спросите вы.Ответ таков: вы можете создавать репозитории, подобные test-test, для каждого разработчика и использовать один и тот же шаблон для их настройки.Недостатком этого подхода является то, что коллаборационистам придется клонировать каждое из test-test-[person's name]-development репозиториев.

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

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

Все эти вещи кажутся немного сложными.Но это всегда так, если вы не хотите платить за простоту.

5 голосов
/ 21 мая 2015

Как и в GitLab, BitBucket.org имеет функцию ограничения ветвей.

http://blog.bitbucket.org/2013/09/16/take-control-with-branch-restrictions/

1 голос
/ 05 декабря 2017

В версии Bitbucket ( Bitbucket v4.9.1 ) Вы можете ограничить изменения следующим образом:

  1. Имя ветви
  2. Шаблон имени ветви
  3. Моделирование имени ветви

Следующие действия могут быть ограничены:

  1. Запретить все изменения
  2. Запретить удаление
  3. Запретить переписывание истории
  4. Запретить изменения без запроса на извлечение

Введите исключение для пользователя;

enter image description here enter image description here

0 голосов
/ 13 января 2017

Если вы используете bitbucket - существуют разрешения для ветвления для обработки этого. https://confluence.atlassian.com/bitbucket/branch-permissions-385912271.html

0 голосов
/ 09 января 2012

Не практически.Ветви Git на самом деле не отличаются друг от друга тем, что вы, вероятно, думаете, что они есть.

То, что вы, вероятно, хотите сделать здесь, - это использовать отдельный репозиторий для каждой ветки разработки каждого пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...