39

我正在将一个大文件推送到 git,但连接速度很慢。终止此推送(中推)并在我有更好的连接时恢复它的最安全方法是什么?

4

3 回答 3

56

杀死客户端(Ctrl+C或任何其他方法)不会导致服务器上的数据损坏,如果这就是您所说的“安全”的话。在成功传输所有 blob 之前,服务器不会更新任何内容,然后它会更新 refs 以指向新的 blob。

但是,Git 没有任何工具可以恢复中断的传输,因此当您的连接速度更快时,您可能不得不再次传输大 blob。

于 2012-07-30T20:31:47.250 回答
15

我相信git push是原子的,也就是说,如果你只是 Ctrl-C 退出操作,远程存储库将处于其原始状态,在推送之前。这也意味着,当您再次推送时,它将从头开始。但这听起来并不一定是你的问题。

于 2012-07-30T20:35:59.907 回答
1

在 Git 2.30(2021 年第一季度)之前,被杀死的 " git push" ( man )可能会留下一个 pack-objects 进程,仍在计算以找到一个好的压缩,浪费周期。

这已得到纠正,并说明杀死正在进行的推送是多么安全。

请参阅Jeff King ( ) 的提交 8b59935(2020 年 11 月 20 日(由Junio C Hamano 合并 -- --adae5df 提交中,2020 年 12 月 3 日)peff
gitster

send-pack: 在信号或退出时杀死 pack-objects 助手

签字人:杰夫·金

我们生成一个外部打包对象进程来实际将对象发送到远程端。
如果我们在这个过程中被信号杀死,pack-objects 会继续运行并完成推送,这可能会让用户感到惊讶。

我们下去的时候应该把它拿下来。

于 2020-12-04T23:53:26.193 回答