Git push经常因管道破裂而失败。有没有办法不从头开始?

Git push经常因管道破裂而失败。有没有办法不从头开始?,git,push,broken-pipe,Git,Push,Broken Pipe,我在一个发展中国家,在这里期间,我正努力继续从事一个大型项目。我目前正试图通过一个不可靠的100Kbps连接来推动大约10GB的更改。我不知道到底出了什么问题,但我无法完成推送,推送已经结束了好几次,出现了以下错误: fatal: The remote end hung up unexpectedly fatal: sha1 file '<stdout>' write error: Broken pipe 我通常让它在一夜之间运行,当我醒来时,我发现在几次失败后,推动就完成了。但这

我在一个发展中国家,在这里期间,我正努力继续从事一个大型项目。我目前正试图通过一个不可靠的100Kbps连接来推动大约10GB的更改。我不知道到底出了什么问题,但我无法完成推送,推送已经结束了好几次,出现了以下错误:

fatal: The remote end hung up unexpectedly
fatal: sha1 file '<stdout>' write error: Broken pipe
我通常让它在一夜之间运行,当我醒来时,我发现在几次失败后,推动就完成了。但这一次,我已经试了好几天了,但由于管道破裂,推动一直失败。我认为我的承诺太大了,在停电和网络中断之间的几个小时内,我的承诺根本不起作用


有没有办法以较小的增量推送我的提交?或者有没有一种方法可以从上次管道破裂的地方开始,这样我就不必每次都从头开始?

Git没有任何可恢复推送的代码

如果您的更改是由多个提交组成的,那么您可以创建一个包含一些提交的临时分支,并将其推送。然后,您可以推送同一分支的新版本,其中包含更多的提交,以此类推。Git知道远程端基于哪些提交拥有哪些对象,因此它将避免再次发送这些对象

执行此操作的方法是执行以下操作(假设您正在推到
原点
):

然后重复一些,稍后提交。只要提交仍然可以从某个分支访问,Git就会知道远程服务器拥有该提交及其依赖的对象

完成后,可以像正常情况一样推送主分支,并使用
git push origin:temp
清理临时分支


如果您只有一个大型提交,您可以尝试创建较小的临时提交,其中只包含对其中一些文件的完整更改,推送这些文件,然后再次尝试进行更多更改。不过,这可能有效,也可能无效。

Git没有任何可恢复推送的代码

如果您的更改是由多个提交组成的,那么您可以创建一个包含一些提交的临时分支,并将其推送。然后,您可以推送同一分支的新版本,其中包含更多的提交,以此类推。Git知道远程端基于哪些提交拥有哪些对象,因此它将避免再次发送这些对象

执行此操作的方法是执行以下操作(假设您正在推到
原点
):

然后重复一些,稍后提交。只要提交仍然可以从某个分支访问,Git就会知道远程服务器拥有该提交及其依赖的对象

完成后,可以像正常情况一样推送主分支,并使用
git push origin:temp
清理临时分支


如果您只有一个大型提交,您可以尝试创建较小的临时提交,其中只包含对其中一些文件的完整更改,推送这些文件,然后再次尝试进行更多更改。不过,这可能有效,也可能无效。

如果您能够在本国可靠的internet系统上运行Git命令,您可以使用
Git bundle
在不可靠的internet系统上构建一个bundle文件(大致相当于
Git push
将发送的文件),然后使用一些可重启的传输(ftp、curl等)寄包裹。一旦你有了可靠的捆绑包,你就可以在其上运行
git fetch
。如果你能够在你的母国可靠的互联网系统上运行git命令,你可以使用
git bundle
在不可靠的互联网系统上构建捆绑包文件(大致相当于
git push
将发送的内容),然后使用一些可重启的传输(ftp、curl等)来发送包。一旦您拥有了可靠的捆绑包,就可以在其上运行
git fetch
while ! git push; do sleep 30; done
$ git log # find some early commit; call it COMMIT_ID
$ git push origin COMMIT_ID:temp