Existe uma maneira de bloquear uma filial no GIT

Eu tenho uma idéia de bloquear um repository de usuários empurrando arquivos para ele tendo um script de bloqueio no gancho de atualização do GIT, já que o push só pode reconhecer o ID do usuário como argumentos e não as ramificações. Então eu posso bloquear todo o repository que está apenas bloqueando um diretório.

Existe uma maneira de bloquear uma ramificação específica no GIT?

Ou existe uma maneira que um Gancho de Atualização possa identificar de qual ramificação o usuário está empurrando e para qual ramificação o código é enviado?

A ramificação sendo pressionada é o primeiro parâmetro para o gancho de atualização . Se você quiser bloquear o branch myfeature para push, este código (colocado em hooks/update ) irá fazer isso:

 #!/bin/sh # lock the myfeature branch for pushing refname="$1" if [[ $refname == "refs/heads/myfeature" ]] then echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" echo "You cannot push to myfeature! It's locked" echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" exit 1 fi exit 0 

O gancho de atualização, dos documentos:

O gancho é executado uma vez para cada ref a ser atualizado e aceita três parâmetros:

  • o nome do ref sendo atualizado,
  • o nome do object antigo armazenado na ref,
  • e o novo nome de object a ser armazenado na ref.

Então … sim, ele sabe exatamente qual ramificação está sendo pressionada, e pode simplesmente verificar esse parâmetro e sair da falha se ele não quiser que a ramificação seja pressionada.

E se você quiser (inteligentemente) fazer isso antes que o usuário tenha feito o upload dos objects, você pode usar o gancho pré-recebimento:

Este gancho é executado uma vez para a operação de recebimento. Não leva nenhum argumento, mas para cada ref a ser atualizado recebe na input padrão uma linha do formato:

SP SP LF

onde é o nome do object antigo armazenado na referência, é o novo nome do object a ser armazenado na referência e é o nome completo da referência.

(esses são espaços e feed de linha)

Uma ferramenta como o gitolite tem esse tipo de recurso que eu acredito: http://github.com/sitaramc/gitolite