Git si blocca durante la scrittura di oggetti


100

Ci sto provando git push -u origin masterE si blocca

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

La 12.65parte si sposta. Quando esco dal processo e lo eseguo di nuovo, riprende al 99% ma non finisce mai, come prima.

Non è mai stato spinto con successo. Questo è il commit iniziale.


Dove vuoi spingere? Stai usando SSH o qualche altro protocollo?
Paŭlo Ebermann

25
L'impostazione http.postbufferdell'aiuto? stackoverflow.com/questions/6842687/...
VonC

3
Il commento di VonC è troppo facile da trascurare. Per me funziona.
giovedì

1
Incredibile. Lo ha fatto anche per me. Ed è il 2018 ora. Ed è SSH, non HTTP. E l'intero repo è di circa 15 MB. E il server "remoto" è localhost. Smettila di romanticizzare Git, gente, per favore! ;)
Sz.

Risposte:


218

Ho seguito il consiglio di VonC:

git config --global http.postBuffer 524288000

Per riferimenti futuri, in base ai commenti:

500 MB: 524288000 (as posted in the original answer)
1 GB: 1048576000
2 GB: 2097152000 (anything higher is rejected as 'out of range')

4
omg, grazie per questo! mi stava tirando fuori i capelli e questo ha risolto i miei problemi!
Brett Thomas

3
@HugoForte L'aumento del buffer sembrava risolvere la mia scrittura sospesa di file, ma il mio push git non è mai stato completato (bloccato dopo Writing objects: 100%) - in precedenza era sospeso al 25%, quindi questo ha chiaramente aiutato. Tuttavia, stavo ancora ottenendo un comportamento "strano". Ho riavviato il mio sistema e questo sembrava risolvere le cose ... Cordiali saluti ... se qualcuno sta ancora riscontrando problemi dopo aver aumentato il buffer, il riavvio del mio sistema ha aiutato nella mia situazione (la soluzione della vecchia scuola nondimeno, ma un nuovo riavvio ha davvero aiutato).
twknab

4
Qualcuno può spiegare da dove viene il numero 524288000?
Ryre

6
@Ryre sono 500 MB
Hugo Forte

1
Dio benedica te e Stackoverflow, sarei un perdente completo senza,
decoder7283

35

Ciò stava accadendo a causa di un file enorme e non ignorato nella directory del repository. Ops.

MODIFICARE

Il blocco era dovuto al fatto che il caricamento del file richiedeva molto tempo. Il file non doveva essere stato incluso nel push.

MODIFICARE

Mentre è vero che un file enorme potrebbe essere il motivo alla base di questo problema, se non si può ignorare il file in questione o semplicemente avere per spingerlo poi seguire questa risposta.


@TimoSolo Perché dovrei farlo? Ero io quello con il problema e ho documentato la soluzione esatta. Abbastanza diretto.
mattalxndr

4
Sì, la tua soluzione era rimuovere il problema. Per il bene di altre persone che hanno effettivamente bisogno di inviare un file di grandi dimensioni, la risposta di @ hugo-forte risolve il problema. Non hai a, ho solo pensato che sarebbe aiutare più persone - nello spirito del SO.
TimoSolo

1
La domanda non è "Come posso eseguire il commit, quindi inviare un file enorme?". È "La mia spinta non finisce mai. Perché?" Se non ti aspetti che la spinta duri per sempre, allora probabilmente (come me) non intendevi eseguire il commit di quel file enorme.
mattalxndr

3
@mattalxndr Quando la risposta accettata ha 1/8 dei voti, probabilmente dovresti cambiarla.
NorCalKnockOut

1
@mattalxndr Nessuna delle due risposte è perfetta. Uno identifica la causa e l'altro offre una soluzione. La risposta ideale sarebbe identificare la causa, spiegare perché ha il risultato dato e offrire le due soluzioni alternative. IMO, tra le opzioni attuali, la risposta di Hugo Forte è superiore perché risolverà il problema indipendentemente dal fatto che si intendesse spingere il file o meno. Non è ignorare le persone che hanno fatto lo stesso errore che hai fatto tu; risolve il problema tanto per loro quanto per chiunque altro, ma lascia a loro di rimuovere un file se non intendevano eseguirne il push.
BZ1

7

Ho avuto lo stesso problema con (scrivere oggetti% 16) bloccato poi fatale. Ho risolto il problema salvando le modifiche correnti e clonando un nuovo repository, quindi copiandovi i file modificati.

Per esempio. Supponiamo che il repository corrente sia A, quindi tutto ciò che devi fare è:

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

Quindi impegnati e spingi e tutto ha funzionato bene. Ha riconosciuto i file spostati come modificati :)


Stavi sperimentando un sintomo diverso. Il mio non ha avuto errori fatali.
mattalxndr

5

Nel mio caso, stavo usando una cartella git con diritti non validi memorizzati sulla stessa unità di un repository, ma potrebbe essere lo stesso con ssh anche se si utilizza un utente di accesso autorizzato.

Controlla quindi se hai i diritti corretti per scrivere sul repo distante.

Esempio:

Iniziare repo locale e distante

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

Aggiunta di repository remoto a origin

src > git remote add dest /tmp/dst

Simulazione del problema

src > chmod -R 555 /tmp/dst

Aggiunta di file falsi e push

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 si blocca

Soluzione

src > chmod -R 775 /tmp/dst

2
Si prega di considerare l'aggiunta di qualche dettaglio in più alla tua risposta, grazie.
Mirza Sisic

1
Scusate. È meglio ?
Naewis

3

Nella mia situazione era la dimensione del file. Aggiungendo un file .gitignore con le estensioni richieste, sono stato in grado di ignorare la maggior parte dei file indesiderati da inviare.


2

Nel mio caso avevo una velocità di caricamento di Internet lenta e il file che volevo spingere era grande, il trucco è usare git LFS (archiviazione di file di grandi dimensioni) che è molto più paziente per caricare file di grandi dimensioni, puoi trovare un tutorial su git LFS qui


1

git clean -f -nrisolve il mio problema. Sono presenti molti file non tracciati non rilevati. Ma fai attenzione perché questo rimuoverà i file nella tua directory


3
Nello specifico quali file rimuoverà?
Jazimov

1

Nel mio caso, stavo cercando di spingere senza completare le regole della mia azienda. Ho appreso in seguito che dovremmo iniziare i nostri messaggi di commit con "MOBIL-XXXX" dove XXXX è il numero assegnato agli sviluppatori in Jira (un altro strumento che usiamo per monitorare il processo di sviluppo) dagli analisti.

Assicurati di controllare se la tua azienda ha una regola vincolante simile.


0

Stavo riscontrando lo stesso problema sulla macchina Windows 10, writing objectsera in sospeso, ma in una situazione leggermente diversa.

Il problema che stavo riscontrando era solo quando stavo cercando di aggiungere nuovi file al repository. Se aggiorno i file che sono già esistenti nel repository, tutto funzionava bene e non importa se la dimensione del file era grande o meno. Per lo più stavo cercando di aggiungere nuovi script.

Ho provato ogni altra soluzione trovata su Internet ma nel mio caso non ha funzionato niente e l'ultima cosa che ho provato ha funzionato. Sembra che sia stato a causa di alcune autorizzazioni di Windows per l'unità e la cartella specifiche che impediscono all'app di scrivere in quelle cartelle specifiche o di aggiornare i file anche quando ho effettuato l'accesso con un account amministratore e stavo eseguendo l'app come amministratore. Quindi questo comando:

attrib -r +s D:\foldername 

risolto il problema per me.

Solo pubblicandolo qui, forse qualcuno ha lo stesso problema del mio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.