Git trava enquanto escreve objetos

100

Eu estou tentando git push -u origin masterE ele apenas trava

Writing objects:  99% (219/220), 12.65 MiB | 97 KiB/s

A 12.65parte muda. Quando saio do processo e o executo novamente, ele continua em 99%, mas nunca termina, como antes.

Nunca é empurrado com sucesso. Este é o commit inicial.

mattalxndr
fonte
Para onde você quer ir? Você está usando SSH ou algum outro protocolo?
Paŭlo Ebermann
25
Estaria definindo a http.postbufferajuda? stackoverflow.com/questions/6842687/…
VonC
3
O comentário de VonC é muito fácil de ignorar. Funciona para mim.
Thuan
1
Inacreditável. Isso funcionou para mim também. E é 2018 agora. E é SSH, não HTTP. E todo o repo tem cerca de 15 MB. E o servidor "remoto" é localhost. Pare de romantizar o Git, pessoal, por favor! ;)
Sz.

Respostas:

218

Segui o conselho de VonC:

git config --global http.postBuffer 524288000

Para referências futuras, com base em comentários:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')
Hugo Forte
fonte
4
omg, obrigado por isso! estava puxando meu cabelo, e isso resolveu meus problemas!
Brett Thomas de
3
@HugoForte Aumentar o buffer pareceu resolver minha gravação de arquivos pendurada, mas meu push git nunca foi concluído (pendurado depois Writing objects: 100%) - anteriormente estava pendurado em 25%, então isso claramente ajudou. No entanto, eu ainda estava tendo um comportamento "estranho". Eu reiniciei meu sistema e este parecia coisas a resolver ... FYI ... se alguém ainda está batendo problemas depois de aumentar sua buffer, reiniciar meu sistema ajudou na minha situação (idade solução escola, não obstante, mas um novo reinício realmente ajudou).
twknab
4
Alguém pode explicar de onde 524288000vem o número ?
Ryre
6
@Ryre é 500 MB
Hugo Forte
1
Deus te abençoe e Stackoverflow, eu seria um perdedor completo sem,
decoder7283
35

Isso estava acontecendo por causa de um arquivo enorme e não ignorado no diretório repo. Opa.

EDITAR

O travamento ocorreu porque o arquivo estava demorando muito para ser carregado. O arquivo não deveria ter sido incluído no push.

EDITAR

Embora seja verdade que um arquivo enorme pode ser a razão por trás desse problema, se você não pode ignorar o arquivo em questão ou apenas tiver que enviá-lo, siga esta resposta.

mattalxndr
fonte
@TimoSolo Por que eu faria isso? Eu era o único com o problema e documentei a correção exata. Bem direto.
mattalxndr
4
Sim, sua solução foi remover o problema. Para o bem de outras pessoas que realmente precisam enviar um arquivo grande, a resposta de @hugo-forte resolve o problema. Você não precisa , eu apenas pensei que ajudaria mais pessoas - no espírito de SO.
TimoSolo
1
A questão não é "Como posso enviar um commit e enviar um arquivo enorme?". É "Meu push git nunca termina. Por quê?" Se você não está esperando que o envio demore uma eternidade, então provavelmente (como eu) não pretendia enviar aquele arquivo enorme.
mattalxndr
3
@mattalxndr Quando a resposta aceita tiver 1/8 dos votos, você provavelmente deve alterá-la.
NorCalKnockOut
1
@mattalxndr Nenhuma das respostas é perfeita. Um identifica a causa e o outro oferece uma solução. A resposta ideal seria identificar a causa, explicar por que ela tem o resultado dado e oferecer as duas soluções alternativas. IMO, fora das opções atuais, a resposta de Hugo Forte é superior porque vai resolver o problema independentemente de se pretendia empurrar o arquivo ou não. Não é ignorar as pessoas que cometeram o mesmo erro que você; ele corrige o problema para eles tanto quanto para qualquer outra pessoa, mas deixa para eles a tarefa de remover um arquivo se não pretendessem enviá-lo.
BZ1
7

Eu tive o mesmo problema com (escrever objetos% 16) travado e fatal. Resolvi isso salvando as alterações atuais e clonando um novo repositório e, em seguida, copiando os arquivos modificados para ele.

Por exemplo. Suponha que o repositório atual seja A, então tudo que você precisa fazer é:

  1. mv A B
  2. git clone A
  3. mv B/* A/
  4. rm -rf B

Em seguida, comprometa e empurre e tudo funcionou bem. Ele reconheceu os arquivos movidos como modificados :)

Maha
fonte
Você estava experimentando um sintoma diferente. O meu não teve nenhum erro fatal.
mattalxndr
5

No meu caso, eu estava usando uma pasta git com direitos inválidos armazenados na mesma unidade de um repo, mas poderia ser o mesmo com ssh mesmo se você usar um usuário de login autorizado.

Verifique se você tem os direitos corretos para escrever no repositório distante.

Exemplo:

Init repo local e distante

git init /tmp/src
git init --bare /tmp/dst
cd /tmp/src

Adicionando repositório remoto à origem

src > git remote add dest /tmp/dst

Simulando problema

src > chmod -R 555 /tmp/dst

Adicionando arquivo falso e empurrando-o

src > touch a && git add a && git commit -m 'demo'
src > git push --set-upstream dest master
src > git push
Counting objects: 3, done.
Writing objects: 99% (2/3), 202 bytes | 0 bytes/s.

Git trava

Solução

src > chmod -R 775 /tmp/dst
Naewis
fonte
2
Considere adicionar mais alguns detalhes exemplares à sua resposta, obrigado.
Mirza Sisic de
1
Desculpe. É melhor ?
Naewis
3

Na minha situação, era o tamanho do arquivo. Ao adicionar um arquivo .gitignore com as extensões necessárias, fui capaz de ignorar a maioria dos arquivos indesejados a serem enviados.

Skitty
fonte
2

No meu caso, eu estava tendo baixa velocidade de upload pela internet e o arquivo que eu queria enviar era grande, o truque é usar git LFS (armazenamento de arquivos grandes) que é muito mais paciente para fazer upload de arquivos grandes, você pode encontrar um tutorial do git LFS aqui

user3160702
fonte
1

git clean -f -nresolve meu problema. Existem muitos arquivos não rastreados não detectados. Mas tome cuidado porque isso irá remover arquivos em seu diretório

Sherlock
fonte
3
Especificamente, quais arquivos serão removidos?
Jazimov
1

No meu caso, estava tentando empurrar sem cumprir as regras da minha empresa. Aprendi mais tarde que deveríamos iniciar nossas mensagens de commit com "MOBIL-XXXX", onde XXXX é o número que os desenvolvedores são atribuídos no Jira (outra ferramenta que usamos para rastrear o processo de desenvolvimento) por analistas.

Certifique-se de verificar se sua empresa possui uma regra de restrição semelhante.

Onat Korucu
fonte
0

Eu estava tendo o mesmo problema na máquina Windows 10, que writing objectsestava travando, mas em uma situação um pouco diferente.

O problema que eu estava tendo era apenas quando estava tentando adicionar novos arquivos ao repositório. Se eu atualizar arquivos que já existem no repositório, tudo está funcionando bem e não importa se o tamanho do arquivo era grande ou não. Principalmente, eu estava tentando adicionar novos scripts.

Tentei todas as outras soluções encontradas na internet, mas nada funcionou no meu caso e a última coisa que tentei realmente funcionou. Parece que foi por causa de algumas permissões do Windows para a unidade e pasta específicas que impedem que o aplicativo grave nessas pastas específicas ou atualize os arquivos, mesmo quando estou conectado com uma conta de administrador e executando o aplicativo como administrador. Portanto, este comando:

attrib -r +s D:\foldername 

corrigiu o problema para mim.

Apenas postando aqui, talvez alguém tenha o mesmo problema que o meu.

h4rd4r7c0r3
fonte