Skip to contentSkip to conversation

git not resuming push

DISCUSSION Paul Brossier 3 participants 5 messages Jun 15, 2016

lore
Share & tools
lore
#0 lore raw

Hi!

I'm trying to upload large amount of data from a connection that often cuts.

If the connection fails after uploading part of the data, it seems I need to start over from zero again. Is there a way to resume the upload instead?

Here is an example:

$ git push
Counting objects: 504, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (475/475), done.
Write failed: Broken pipe1/476), 533.78 MiB | 60 KiB/s
fatal: The remote end hung up unexpectedly
error: pack-objects died of signal 13
error: failed to push some refs to 'myhost.org:/git/myrepo/'
$ git push
Counting objects: 504, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (475/475), done.
Writing objects:  12% (61/476), 89.34 MiB | 23 KiB/s

Thanks, piem

#1 lore raw
Quoted 3 lines · Paul Brossier

If the connection fails after uploading part of the data, it seems I need to start over from zero again. Is there a way to resume the upload instead?

No, there isn't a way to resume just using push.

If you have shell access on the server, one workaround you can do is to create a bundle with the commits in question, upload it via some resumable protocol (like sftp, http, rsync, etc), possibly taking many attempts, and then fetch the result on the server side from the bundle into the repository.

See "git help bundle" for some examples.

-Peff

#2 lore raw
Quoted 8 lines · Jeff King
Quoted 3 lines · Paul Brossier

If the connection fails after uploading part of the data, it seems I need to start over from zero again. Is there a way to resume the upload instead?

No, there isn't a way to resume just using push.

Quoted 7 lines

If you have shell access on the server, one workaround you can do is to create a bundle with the commits in question, upload it via some resumable protocol (like sftp, http, rsync, etc), possibly taking many attempts, and then fetch the result on the server side from the bundle into the repository.

See "git help bundle" for some examples.

Another possibility, if it is the connection between you and the other side that is the problem, is to chunk your push in smaller pieces. That is, if you are trying to push out v3.0, you first push only to v1.0, then to v2.0, and then finally to v3.0.

Peff, by the way, wouldn't this request reminds of us of a scenario we discussed recently, which I said I would imagine would be common while you dismissed as not likely to be common?

#3 lore raw
Quoted 8 lines · Junio C Hamano

Another possibility, if it is the connection between you and the other side that is the problem, is to chunk your push in smaller pieces. That is, if you are trying to push out v3.0, you first push only to v1.0, then to v2.0, and then finally to v3.0.

Peff, by the way, wouldn't this request reminds of us of a scenario we discussed recently, which I said I would imagine would be common while you dismissed as not likely to be common?

I didn't say it wasn't common; I said I didn't think it was the majority case, and that I didn't want a solution that only helped this case without covering the other cases.

Also, it isn't clear to me that an immediate-reconnect scheme would work. When the connection gets dropped, is it simply that TCP connection that goes out, and another one could immediately be made to resume? Or is the network actually out (even if only for a few seconds)?

-Peff

#4 lore raw
In reply to Junio C Hamano

ok, that, with a bit of patience, should help!

thank you both for your answers,

piem

Quoted 28 lines · Junio C Hamano
Quoted 8 lines · Jeff King
Quoted 3 lines · Paul Brossier

If the connection fails after uploading part of the data, it seems I need to start over from zero again. Is there a way to resume the upload instead?

No, there isn't a way to resume just using push.

Quoted 7 lines

If you have shell access on the server, one workaround you can do is to create a bundle with the commits in question, upload it via some resumable protocol (like sftp, http, rsync, etc), possibly taking many attempts, and then fetch the result on the server side from the bundle into the repository.

See "git help bundle" for some examples.

Another possibility, if it is the connection between you and the other side that is the problem, is to chunk your push in smaller pieces. That is, if you are trying to push out v3.0, you first push only to v1.0, then to v2.0, and then finally to v3.0.

Peff, by the way, wouldn't this request reminds of us of a scenario we discussed recently, which I said I would imagine would be common while you dismissed as not likely to be common?