Configurar um controle remoto somente leitura no git

História curta

Crie um remoto (ou use um existente) e defina seu URL de envio para algo engraçado.

$ git remote add origin-readonly https://url.to/remote.git
$ git remote
set-url origin-readonly --push "You shall not push"

Longa história

Se você está usando o git-flow , e eu acho que a maioria de vocês está ou já tentou pelo menos uma vez (se não, recomendo que você leia este artigo ), você provavelmente já esteve nesta situação.

Digamos que você tenha um branch de recurso feature/awesome-feature, e deseja que ele rastreie o developbranch remoto para mantê-lo atualizado com as alterações mais recentes sem correr o risco de acidentalmente enviar seu recurso para ele. Configure um controle remoto somente leitura como mostrado na “História curta” , configure-o como o upstream do seu branch de recursos, et voilà.

Faça seu branch rastrear o branch remoto somente leitura que você deseja.

$ git branch feature/awesome-feature -u origin-readonly/develop

Agora você pode extrair as alterações mais recentes develop, mas não pode empurrar.

$ git pull
$ git push

# Pushing to You shall not push
# fatal: 'You shall not push' does not appear to be a git repository

Observe que você ainda pode usar qualquer controle remoto que desejar, especificando-o explicitamente .

$ git push origin HEAD