Uma maneira de restringir o access à ramificação do Git?

Eu tenho quatro filiais no meu repository git, que é gerenciado usando o GitHub:

  • Produção
  • Encenação
  • mestre
  • [nome da pessoa] -desenvolvimento

Existe uma maneira de restringir o access de gravação a apenas uma única ramificação ([nome da pessoa] -desenvolvimento)? Como eu faria isso?

Para referência, uma pergunta semelhante: Como escrever um gancho git para restringir a escrita ao ramo? .

Ao usar o GitHub, sua melhor opção seria para cada desenvolvedor ter seu próprio fork do repository principal. Todo mundo envia para o seu próprio repository e alguém com access push ao repository principal manipula a extração do repository de cada desenvolvedor. É assim que a maioria dos projetos de código aberto funciona.

Se estiver usando seu próprio servidor Git, deve ser possível usar ganchos para impedir que os usuários façam o push para ramais errados.

O GitHub adicionou a funcionalidade para restringir quais usuários podem enviar para uma filial das Organizações no início deste ano .

restringir filial

Nota: As filiais protegidas e as verificações de status necessárias (3 de setembro de 2015) não permitirão exatamente uma única ramificação (“[nome da pessoa] -desenvolvimento”), mas serão clonadas.

A filial será protegida:

  • contra forçado empurrado
  • contra exclusão
  • contra alterações mescladas até que as verificações de status necessárias passem

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

Você pode querer verificar o GitLab e seu recurso “branch protegido”. Eu acho que é exatamente o que você está procurando. Consulte Mantendo seu código protegido .

A Esko sugeriu uma ótima solução adequada para projetos de código aberto. No entanto, é necessário que todos os membros de uma equipe de colaboradores tenham uma conta paga no GitHub, o que nem sempre é verdade.

VonC apontou que há outra solução que envolve apenas uma conta paga do GitHub. E vou fornecer um tutorial sobre como implementar a solução da VonC.

Vamos supor que tenhamos dois repositorys privados: test-test e test-production . O primeiro repo é para desenvolvimento e cada membro de uma equipe tem access a ele. O segundo repo é para implantação automática de código e, portanto, fortes restrições de access são aplicadas a ele.

A configuração para desenvolvedores é bem simples e direta: git clone https://github.com//test-test , faça seu trabalho e repita.

A configuração para os colaboradores é um pouco mais complicada:

  1. Pull branches do git clone https://github.com//test-test repo git clone https://github.com//test-test desenvolvimento git clone https://github.com//test-test

  2. Adicionar repository remoto git remote add production-repo https://github.com//test-production.git

  3. Buscar dados do novo repo git fetch production-repo

  4. Crie uma nova ramificação local para o código de produção e mude para ela git checkout -b local-production

  5. Diga ao git para ligar as filiais locais e remotas git branch -u production-repo/production

  6. Faça o download do conteúdo da ramificação de produção remota para o git pull local

  7. Separe possíveis conflitos e pronto!

Agora, tudo o que é enviado do ramo de local-production entrará no test-production e os outros ramos serão empurrados para o test-test .

Ok, isso é legal, mas e quanto ao access mais granular ([nome da pessoa] -desenvolvimento)? – Você pode perguntar. A resposta é: você pode criar repos similares ao test-test para cada desenvolvedor e usar o mesmo padrão para configurá-los. A desvantagem dessa abordagem é que os colaboradores terão que clonar cada uma das recompras de test-test-[person's name]-development de test-test-[person's name]-development .

A VonC também sugeriu o fork do repository de production e fazer pedidos de pull – por que não fazer assim? Em primeiro lugar, porque você não pode desembolsar um repository privado sem ter pago a conta do GitHub. Em segundo lugar, para permitir que alguém assuma um repo particular , você dá a ele access total a ele, para que ele possa enviá-lo diretamente. E um desenvolvedor pode cometer um erro, empurrar para o repository de production lança os ganchos de serviço do GitHub e estragar tudo. E se você usar vários desenvolvedores terceirizados, isso provavelmente acontecerá.

Também gostaria de avisá-lo sobre um recurso de bug no aplicativo oficial do GitHub para Windows. Os ramos com um montante diferente da origem entrarão em origem. Então use a linha de comando para empurrar.

Todas essas coisas soam pouco complicadas. Mas é sempre assim se você não quer pagar pela simplicidade.

Assim como no GitLab, o BitBucket.org também possui um recurso de restrição de ramificação.

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

Na versão Bitbucket ( Bitbucket v4.9.1 ) Você pode restringir as alterações por:

  1. Nome da filial
  2. Padrão de nome de ramificação
  3. Modelagem de nome de ramificação

As seguintes ações podem ser restritas:

  1. Impedir todas as alterações
  2. Evitar a exclusão
  3. Evitar a reutilização do histórico
  4. Evitar alterações sem solicitação de pull

Digite o usuário que é uma exceção;

insira a descrição da imagem aqui insira a descrição da imagem aqui

Não praticamente. Os twigs do Git não são realmente distintos um do outro da maneira que você provavelmente está pensando que eles são.

O que você provavelmente quer fazer aqui é usar um repository separado para o ramo de desenvolvimento de cada usuário.

Se você usa bitbucket – existem permissions de ramificação para lidar com isso. https://confluence.atlassian.com/bitbucket/branch-permissions-385912271.html