2013-03-22 9 views
13

Ci stiamo solo muovendo per cedere al mio lavoro. Abbiamo un progetto abbastanza grande con alcune risorse abbastanza grandi sotto il controllo della versione (~ 500 MB).Git - la spinta di un ramo remoto per un progetto di grandi dimensioni è molto lenta

Oggi abbiamo provato a trasferire un ramo su un server remoto e siamo rimasti sorpresi dal fatto che git abbia cercato di caricare l'intero progetto. Mi sarei aspettato che Git inviasse solo i delta per i file di testo 4-5 che avevano delle modifiche (come fa per un normale push to master). Non è così che funzionano le filiali remote? Abbiamo usato git push origin some_branch_name, c'è un comando migliore da usare in questo caso? Non dovremmo conservare grandi risorse in git? Altrimenti, come fanno le persone a gestire questo scenario? C'è un modo migliore per uno sviluppatore di condividere lavori in corso con un altro sviluppatore senza impegnare le modifiche al ramo principale? Così com'è, stiamo guardando circa 15 minuti per spingere un ramo remoto, che non è davvero praticabile. Cosa stiamo sbagliando?

+0

Hai provato 'git push origine HEAD: some_branch_name'? – devang

+1

Stesso risultato. Sto testando su un ramo che rimuove un file. Dopo aver eseguito per qualche minuto, legge 'Oggetti scrittura: 17% (8153/46698), 192,53 MiB | 2.46 MiB/s' – herbrandson

+1

Quanto tempo è trascorso da quando hai eseguito 'git gc' sul repository locale? Non sono sicuro che stia succedendo (non sono sicuro del motivo per cui ciò porterebbe a scrivere più dati sulla rete, per esempio), ma ho avuto sostanzialmente un notevole aumento delle operazioni git. – rra

risposta

1

Puoi aggiornare il tuo post con alcune cose?

per avere una migliore idea di come il vostro progetto guarda, si prega di inviare in giro i primi 10+ voci del seguente:

git log --decorate=short --oneline --graph --all 

Se le grandi risorse sono binari, allora no non dovrebbero essere conservate in git . Se quelle risorse binarie vengono aggiornate allora git deve produrne un duplicato completo internamente, al quale l'algoritmo di compressione non piace, e inviarle al server. Per quanto riguarda cosa fare su di loro, dipende dallo scenario. Avrai bisogno di elaborare.

Sembra che diversi sviluppatori lavorino sullo stesso telecomando. È corretto? Se è così, nessuno sviluppatore dovrebbe essere impegnato direttamente su master (imho non dovrebbe mai accadere comunque). È possibile che ogni sviluppatore abbia il proprio ramo denominato. Ad esempio, lo sviluppatore John può creare tutte le sue filiali sotto john/<branch_name>. Ciò contribuirà a mantenere pulito il flusso di lavoro.

Inoltre, git non funziona con i delta. Memorizza il file nella sua interezza ogni volta che viene modificato. Questo può sembrare inefficiente, ma la compressione utilizzata riduce le dimensioni al minimo. E aiuta molto più velocemente i checkout e la cronologia dei log di scansione. Leggi la prima sezione di Git Basics per una visualizzazione.

+5

questo non spiega perché git sta spingendo l'intero repo (o si sente come, comunque), quando sono cambiati solo pochi file. il fatto che ci siano molti file binari non dovrebbe fare una spinta (che non cambia nessuno) più lentamente – grahamrhay

+0

Penso che possa essere correlato a questo https://stackoverflow.com/questions/29118876/git-push-is -molto lento per un ramo forse? Facendo un git fetch lo imposta per il trasporto veloce. O qualcosa di simile. –

Problemi correlati