Quando executo git remote -v
em um dos meus repositórios Git que possui um (s) controle (s) remoto (s) configurado (s), vejo que cada controle remoto possui especificações de busca e envio:
$ git remote -v
<remote-name> ssh://host/path/to/repo (fetch)
<remote-name> ssh://host/path/to/repo (push)
Para controles remotos que apontam para desenvolvedores de mesmo nível, não há necessidade de enviar por push, e o Git se recusará a enviar para um repositório não-nua de qualquer maneira. Existe alguma maneira de configurar esses controles remotos como "somente busca" sem endereço de push ou recursos?
Respostas:
Não acho que você possa remover o URL de envio. Você pode substituí- lo por algo diferente do URL de recebimento. Então, acho que o mais próximo que você vai chegar é algo assim:
Você está configurando o URL push como
no-pushing
, que, desde que você não tenha uma pasta com o mesmo nome no seu diretório de trabalho, o git não poderá localizar. Você está essencialmente forçando o git a usar um local que não existe.fonte
git remote set-url --push origin -- --read-only--
- observe o extra--
para permitir um nome com traços à esquerda. Isso me pareceu mais legível.Além de alterar o URL de envio para algo inválido (por exemplo,
git remote set-url --push origin DISABLED
), também é possível usar opre-push
gancho.Uma maneira rápida de parar
git push
é fazer o link simbólico/usr/bin/false
para ser o gancho:O uso de um gancho permite um controle mais refinado dos impulsos, se desejado. Veja
.git/hooks/pre-push.sample
um exemplo de como evitar o envio de confirmações de trabalho em andamento.Para impedir o envio para um ramo específico ou limitar o envio para um único ramo, isso é um exemplo de gancho:
Um repositório de teste com vários controles remotos:
Pressionar para
origin
é permitido:Empurrar para qualquer outro controle remoto não é permitido:
Observe que o
pre-push
script do gancho pode ser modificado para, entre outras coisas, imprimir uma mensagem para o stderr dizendo que o envio foi desativado.fonte
A declaração geral "O Git se recusará a enviar para um repositório não-nua" não é verdadeira. O Git se recusará a enviar por push para um repositório remoto não-nu se você estiver tentando enviar alterações que estão na mesma ramificação que o diretório de trabalho com check-out do repositório remoto.
Esta resposta fornece uma explicação simples: https://stackoverflow.com/a/2933656/1866402
(Estou adicionando isso como resposta, porque ainda não tenho reputação suficiente para adicionar comentários)
fonte
Se você já possui uma configuração remota e apenas deseja impedir que faça algo acidentalmente pressionando diretamente para
master
ourelease/production
, pode impedir esse usogit config
.Para o registro,
no_push
não é um nome especial. É apenas o nome de qualquer ramo inexistente. Então você poderia usar$ git config branch.master.pushRemote create_a_pr_and_do_not_push_directly_to_master
e funcionaria muito bem.Mais informações: git-config pushRemote
fonte
Se você tiver controle sobre o repositório, poderá conseguir isso usando permissões. O usuário que está buscando o repositório não deve ter permissões de gravação no repositório principal.
fonte