1
resposta

git push local master da erro

$ git push local master
Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 4 threads
Compressing objects: 100% (22/22), done.
Writing objects: 100% (24/24), 1.25 MiB | 4.95 MiB/s, done.
Total 24 (delta 1), reused 0 (delta 0), pack-reused 0
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: is denied, because it will make the index and work tree inconsistent
remote: with what you pushed, and will require 'git reset --hard' to match
remote: the work tree to HEAD.
remote:
remote: You can set the 'receive.denyCurrentBranch' configuration variable
remote: to 'ignore' or 'warn' in the remote repository to allow pushing into
remote: its current branch; however, this is not recommended unless you
remote: arranged to update its work tree to match what you pushed in some
remote: other way.
remote:
remote: To squelch this message and still keep the default behaviour, set
remote: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To C:/Users/User/Desktop/servidor/
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'C:/Users/User/Desktop/servidor/'
1 resposta

Oi, Samuel! Tudo bom contigo?

Este erro nos é apresentado quando tentamos fazer push para um repositório que não possui o parâmetro --bare. Por meio deste parâmetro, indicamos qual será o nosso repositório central, isto é, aquele que receberá os commits de todos os outros lugares.

Para conseguir realizar o push, portanto, teremos que:

  1. Ir para a pasta de nome “servidor”:

     cd "C:/Users/User/Desktop/servidor/"
  2. Certificar-se de que “servidor” não é repositório “bare”: à esquerda do caminho da pasta, podemos verificar se a flag “bare” está presente, como mostra a imagem abaixo:

    Captura de tela do Git Bash. Tela de fundo preto com duas linhas. Na primeira linha, é referenciado o dispositivo no qual o Git Bash está sendo executado e o caminho incompleto da pasta “servidor”; na extremidade direita, há o texto “(BARE:master)”. A segunda linha contém o símbolo de cifrão.

Caso não haja a flag “bare”, significa dizer, portanto, que “servidor” foi inicializado como um repositório comum. Para torná-lo um repositório remoto, podemos seguir com os passos abaixo:

  1. Excluir o arquivo .git da pasta “servidor”: essa pasta é criada ao executar o comando git init. Quando fazemos somente isso, perdemos a liberdade de executar comandos como o git push (só possível em repositórios com a flag --bare). Por padrão, a pasta “.git” fica oculta quando tentamos vê-la no explorador de arquivos. Caso esteja utilizando o sistema operacional Windows, para excluí-la, teremos que clicar em “Visualizar”, selecionar a opção “Mostrar” e, por fim, clicar em “Itens ocultos”, como mostro abaixo:

    Recorte de captura de tela do explorador de arquivos do Windows. Menu superior em que há os seguintes itens com conteúdo textual: “Novo”, “Classificar” e “Visualizar”. O último item, em que está escrito “Visualizar”, foi destacado por uma borda vermelha. Recorte de captura de tela do explorador de arquivos do Windows. É apresentado duas listas suspensas. A primeira lista, na parte superior esquerda, contém os itens: “Ícones extra grandes”, “ícones grandes”, “Ícones médios”, “Ícones pequenos”, “Lista”, “Detalhes”, “Blocos”, “Conteúdo”, “Exibição compacta” e “Mostrar”; o último item, de cima para baixo, em que está escrito “Mostrar”, foi destacado por uma borda vermelha. Na lista suspensa localizada na porção inferior direita da tela, apresentam-se itens referentes à opção “Mostrar”; os itens da lista são: “Painel de navegação”, “Painel de detalhes”, “Painel de visualização”, “Caixas de seleção de item”, “Extensões de nomes de arquivos” e “Itens ocultos”; o último item, de cima para baixo, em que está escrito “Itens ocultos”, foi destacado por uma borda vermelha.

    Feito isso, “.git” irá aparecer na pasta “servidor”. Basta selecioná-lo e excluí-lo;

  2. Acessar a pasta servidor, dentro do Git Bash, e então inicializá-la novamente (desta vez adicionando o parâmetro --bare), desta forma:

     git init --bare

Feito isso, já é possível retornar à pasta em que se estava tentando fazer o push e, então, executar o comando que leva todas as novas modificações para o nosso repositório remoto (”servidor”):

git push local master

Samuel, espero tê-lo ajudado. Caso surja alguma dúvida após minha explicação ou ao longo dos seus estudos, fico à disposição para ajudá-lo.

Até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.